20190704のGitに関する記事は11件です。

BFG Repo-Cleanerを使ってGitリポジトリを軽くした件

要らないデータの大きさを簡単に確認する方法


git clone https://github.com/daijinload/test.git
cd test

wget https://confluence.atlassian.com/bitbucket/files/321848291/321979854/1/1360604134990/git_find_big.sh
chmod 755 git_find_big.sh
./git_find_big.sh

中に入ってダウンロードしたシェルスクリプトを実行するだけ。

bfgを使ってファイルを削除する方法


※注)必ずバックアップを取ってから実行してください。

wget https://repo1.maven.org/maven2/com/madgag/bfg/1.13.0/bfg-1.13.0.jar

git clone --mirror https://github.com/daijinload/test.git
du -hs test.git/objects

java -jar bfg-1.13.0.jar -D 'bigfile1' test.git
java -jar bfg-1.13.0.jar -D 'bigfile2' test.git

cd test.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push

以上で、Gitのリポジトリが軽くなります。

先頭コミットのハッシュ値が変わってなかったですが、リリースしたときのハッシュ値を保存しているような現場では、調べてから実行したほうが良いと思います。

また、念のため作業者全員のローカルのGitをcloneしなおしたほうが良いと思います。

とりあえず、リポジトリを軽くしたい人は、ぜひ!!

参考URL


// git_find_big.shの説明
https://confluence.atlassian.com/bitbucket/maintaining-a-git-repository-321848291.html

// bfg.jar
https://rtyley.github.io/bfg-repo-cleaner/

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

コミットメッセージにPrefixつけるようにするとコミット粒度が細かくなっていい感じ。

いつだったか、Twitterでgitのコミットメッセージにプレフィクスをつけるって話をみかけて、自分でもやってみました。

Prefixの付け方もいろいろあるようなんですが、自分は下記2つのミックスでやってます。

だいたい使ってるのは下記です。

  • add: ファイルの追加や機能の追加
  • fix: バグ修正
  • change: 機能、仕様の変更
  • refactor: リファクタリング
  • disable: 無効化。だいたいはコメントアウト
  • remove:削除。コメントアウトしたコードの削除とかファイル削除とか
  • style: コードフォーマットの変更
  • comment: コメント追加・修正

使うか微妙だなぁってのは下記。

  • revert: 変更とりやめ。SourceTreeで元にもどすと自動でコミットメッセージはいるんで自分では入れなさそう。
  • test: テストだけを変更したときに使うかもなぁって思ったんですが、結局使わずに、テストコードをどうしたのかをfix, addなどで書いてます。

他にもオープンソースプロジェクトなどでPrefixのルール決めてるケースがあったら参考にしてみたいので知りたいところです。

Prefixつけると、ごちゃまぜコミットが減ります。

さて実際にPrefixつけたコミットメッセージをつけるようになると、いろんなコミットがごちゃまぜにならないようにコミット粒度を細かくわけるようになってきます。

機能変更(change)してるときに不具合みつけて不具合修正(fix)までした1つのコミットにならないように、わけたりとかですね。

細かい粒度でコミットしてると、あとで「あれ?なんでこのコードこうなってるんだ?」ってときにコミットメッセージからその時どう考えて今のコードになってるのかわかったりして便利です。(逆にひとまとめでドンッとコミットしてると、どういう経緯で今のコードになってるのかわからないことが多いです)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【git】git diffの機能使ってファイルの比較を行う

はじめに

テスト段階で,開発用ブランチの出力結果と自分の作業ブランチの出力結果の比較をしなきゃいけない感じになったので,gitにちょうどいい機能あったなあと思ってgit diffで比較して差分を検証してみることにしました.

手順

  1. なんかディレクトリ適当に作る
  2. 比較したいファイルの片方をgit add .してgit commit
  3. 同じファイルの中身開いて比較したいもう片方の中身をペーストして保存
  4. git diffで差分が出てきます.

$ mkdir seeDiff
$ cd seeDiff
$ vi output.txt
output.txt
My Name is Shuto
$ git init
$ git add .
$ git commit -m "my branch"
$ vi output.txt
output.txt
My Name is Arafat
$ git diff

といった感じで差分だけ表示されます

赤が消えて,緑が追加されましたよー

ってこと

案外この機能がすごく便利で使い所多い気がする

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Git]merge(合流)という名前のせいで、どっちからどっちへの作業なのかが分かりにくい件

はじめに

ペーペーながらgitを使っていて、pullpushcommitaddcheckoutbranchなんかは見慣れてきたけど、最近mergeをする機会が出てきました。
やや混乱したので、備忘録を兼ねてまとめておきます。

mergeはどっちからどっち?

mergeの意味を調べたら、合流とか合併という意味らしい。
これが、ややこしく感じた根源かと思ういます。

mergeはソースを合わせるということですが、どっちからどっちに?ってところがややこしい。
個人的に腑に落ちた表現は、次です。

古いブランチが、新しいブランチの情報を取りに行く

たとえば、

AブランチとBブランチがあって、Aが最新だとする。
今回はBブランチが古いので、新しいAブランチに合わせたいという場合についてです。

この場合、結論からいうと、BブランチがAブランチの情報を取りに行く、と考えると分かりやすいです。
こう考えたことで、

  • Bブランチが主体となって作業する
  • そのため、Bブランチにcheckoutしておく必要がある
  • また、対象がAブランチなので記述にはgit merge Aブランチとなる

これらが腑に落ちました。

さいごに

今日はものすごく簡単な内容でしたが、なぜか僕は混乱したので共有させてもらいます。
最後まで、ありがとうございました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【備忘録】git remote add originできない時

あるリポジトリでgit管理を始める時、下記の手順に従ってコマンドを入力していくと、

スクリーンショット 2019-07-04 13.18.48.png

$ git remote add origin https://github.com/katsuomi/****.git
$ git push -u origin master
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/katsuomi/*****.git/'

となってしまう場合、
git remote add origin https://{gitのID名}@github.com/katsuomi/.git**
とすると、うまくいきました。

$ git remote rm origin
$ git remote add origin https://katsuomi@github.com/katsuomi/*****.git
$ git push -u origin master

以上。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

gitコミットだけ取り消し(ファイルの変更分は消えない)

自分メモ
変更は残して、コミットだけ消したい場合
ex.)コメント変えたい時とか、コミット後に1行だけ修正した時とか

git reset --soft HEAD^
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Gitでstashする方法

  • 環境
    • CentOS Linux release 7.6.1810 (Core)
    • git version 1.8.3.1
    • xfc4-terminal 0.8.7.4

ユーザを設定していない場合は設定する

ユーザを設定しないままstashすると怒られるので設定していない場合は設定する。

# ユーザを設定しないままstashすると怒られる
$ git stash

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account`s default identity.
Omit --global to set the identity only in this repository.

fatal: empty ident name (for <ponsuke@12345abcdefg.(none)>) not allowed
Cannot save the current index state

# そういえばグローバルの.gitconfigはまだなかった
$ find ~ -type f | grep gitconfig
$

# コマンドで設定する
$ git config --global user.email "{メールアドレス}"
$ git config --global user.name "{ユーザ名}"

# グローバルの.gitconfigができる
$ find ~ -type f | grep gitconfig
/home/ponsuke/.gitconfig

名前を付けてstashする

# お名前をつけてstashする
$ git stash save stash-name
Saved working directory and index state On branch-c: stash-name
HEAD is now at bf54b9a

# stashできたか確認する
$ git stash list
stash@{0}: On branch-c: stash-name

# 一応ローカルの変更がstashされてなくなったか確認する
$ git diff HEAD
$

stashを適用する

Gitでstashを適用する方法 - Qiita

参考

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Git初心者から中級者 ブランチ活用編

目的

業務効率化

ブランチの削除する方法

git branch -D hogehoge

過去の履歴を参照する方法

git reflog

履歴から復元する方法

git branch hogenosekai HEAD@{0}

ブランチの確認

git branch --all

ブランチ同士の差分確認

git diff master develop

ブランチAの方がBより古い扱いで差分が表示される

参考

https://www.google.com/amp/s/www.genius-web.co.jp/blog/cat-123/git-branch-reflog-rescue.html/amp

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Gitの日付表示を日本式(yyyy-mm-dd)にしたい Mon Apr とか言われても直感的じゃない

git config --global  log.date iso-local

実行例

Dateのところが変わっている。

before

$git log -n 1
commit 56ce511e63b242f9ee94169fbdkgb0849f45f7a0 (HEAD)
Author: shirofune9876 <shirofune9876@gmail.com>
Date:   Mon Apr 03 00:05:20 2019 +0900

after

$git log -n 1
commit 56ce511e63b242f9ee94169fbdkgb0849f45f7a0 (HEAD)
Author: shirofune9876 <shirofune9876@gmail.com>
Date:   2019-04-03 00:05:20 +0900

特に、pretty=formatしたときに気持ち良い

$git log --pretty=format:"%ad" -n 5
2019-04-27 00:05:20 +0900
2019-04-23 00:02:50 +0900
2019-04-17 22:45:34 +0900
2019-04-17 20:44:09 +0900
2019-04-17 10:20:45 +0900
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

git checkout とか git push のときに、ブランチ名をコピーするのが面倒なとき

ホームディレクトリ配下の.gitconfigに以下の設定を書いておくと、git jumpとかgit bcpと打ち込むだけで、移動したり、ブランチ名をコピーできます。
ただし、pecoコマンドが入っているのでインストールはお忘れなきよう。

~/.gitconfig
[alias]
  jump = !git checkout $(git branch | sed 's/*//g' | sed 's/ //g' | peco)
  bcp  = !git branch | peco | sed 's/*//g' | sed 's/ //g' | tr -d '\n'  | pbcopy

なお、!について、ですが、StackOverFlowによると、

If the alias expansion is prefixed with an exclamation point, it will be treated as a shell command.

!がついてると、shell commandとして見做すということだそうです。
(ついてないと→な感じのエラーが出ます。expansion of alias 'bcp' failed; 'git' is not a git command)。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

VSCodeのRemote-SSHを使っている時、gitで同期ができない問題

VSCodeのRemote-SSHを使っている時、gitで同期ができない問題

問題

VSCode上のターミナルではgitでPullやPushはできるが、VSCode上からPushなどをおこおうとすると、

Git: Permission denied(publickey).

image.png

と表示されてしまう。

環境

ちなみに私の環境はgitlabにRaspberryPiに接続したWindowsマシンのVSCode上でgitを行おうとしていた。

原因

2019/07/03 現在、VSCode公式が近い問題を既存の問題としてあげていた

コメント 2019-07-03 234849.jpg

私の場合、SSHキーにパスフレーズは登録していないが、何をやってもVSCode上からはPullもPushもできなかったため、バグであると納得することにした。

追記:2019/07/04

と、思ったが、ターミナル上でssh-agentが起動しないことを不審に思い、

eval 'ssh-agent'

とやったが、裏で実行されるが、その後の

ssh-add -l

をするとssh-agentが起動されてない旨のメッセージがでてしまっていた。

解決策

そのssh-agentを起動する方法を

eval $(ssh-agent)

とすると、しっかり起動できるようになり、

ssh-add [秘密鍵のパス]

とすれば鍵が登録され、VSCodeからもgitが使えるようになる

ただ、実行する度にプロセスが増えてしまうため、
1つのプロセスを複数のBashから利用するために

http://kurokawh.blogspot.com/2012/07/linuxcygwin-ssh-agent.html

ここのサイトに書かれているコードを.bashrcに追記すると良いと思う。
ちなみに、.bashrcのコードは、ダブルクォーテーションが「“ ”」これになっているため、「" "」に直さないとエラーがでるので気を付けて欲しい。

また、.bashrcに追記するコードの11行目と23行目の

ssh-add

だが、これだけだと、
https://euske.github.io/openssh-jman/ssh-add.html
ここに書いてある通り、引数が無しのため、.ssh内の「id_rsa」,「id_dsa」,,,などなどの決まった名前のファイルしか読み込まないため、
秘密鍵のファイル名を変更している場合には、この11行目と23行目に引数としてファイルのパスを追記してあげると良いと思う。

参考

.bashrc, .bash_logoutソースコード
http://kurokawh.blogspot.com/2012/07/linuxcygwin-ssh-agent.html
ssh-add
https://euske.github.io/openssh-jman/ssh-add.html

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む