gitでmasterと作業用ブランチの差分をとったり、macでcommandを作ったり
現場でgitを使っているのですがその使い方が独特で、作業用に作ったブランチをmasterへ直接マージせず、masterと作業用ブランチの差分ファイルを抽出してから、その差分ファイルのみを改めてmasterへコミットするということをやっています。
どうやら、作業用ブランチのコミット履歴がmasterに大量にプッシュされるのがイヤだそうで……
とにかく、郷に入りては郷に従えということで自分もそのようにしているのですが、毎回ターミナルでコマンドを打つのが大変なのでバッチ(command)を作りました。
他にこういう運用をしている現場があるかは別として、とりあえず自分的備忘録として残しておこうかと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
<small>//まずはgit管理されているフォルダへ移動 cd /Users/username/git/work/contents //今チェックアウトしている作業ブランチとmasterを比較して、差分をzipにまとめる git archive --format=zip --prefix=_contents/ HEAD `git diff master --diff-filter=ACMR --name-only` -o _contents.zip //作ったzipをデスクトップに持ってくる mv _contents.zip /Users/username/Desktop //masterへチェックアウトしとく git checkout master //デスクトップへ移動して、 cd /Users/username/Desktop //zipを解凍して、 unzip '*.zip' //解凍し終わったzipは削除する rm *.zip //作業ファイル一式を格納するディレクトリを作って、 mkdir -p 作業フォルダ/work //zipを解凍してできたファイル一式を移動させる mv _* 作業フォルダ/work //移動させた作業ファイルディレクトリに入って、 cd /Users/username/Desktop/作業フォルダ/work //ディレクトリ名を変更する for f in *; do mv "$f" "${f#_}"; done //移動させた作業ファイルディレクトリの上の階層に移動して、 cd /Users/username/Desktop/作業フォルダ //ゴミファイルを削除して、 find . -name "*DS_Store" -exec rm -r {} \; //ファイル一覧を作る find . -type f > list.txt ファイル一覧を確認して正しく差分が抽出されていることを確認したら、 //デスクトップに持ってきたファイル一式を、改めてgit管理されているディレクトリに投入する cp -Rf /Users/username/Desktop/作業フォルダ/work /Users/username/git </small> |
これをテキストエディタで保存して、拡張子.commandを付ければ、次回からはcommandファイルをダブルクリックするだけでOK
一部、なぜそんなことをする?という工程も混じってますが、そこはそれ、ローカルルール的なあれです。
なんか、必要なのです。
そもそもなぜ作業ブランチをmasterへマージしないのさ!?とも思いますが、この運用に慣れた今となっては、masterへ投入した際に作業ファイルとの差分が一目で分かって、これはこれで良いような気もします。
この運用を一年以上続けた弊害として、今は作業ブランチをmasterへ直接マージするのが怖くなってます。
おぉ、深刻……
別の現場に行った時に一般的な運用ができなくなっていそうだ……