« Firefox限定 加速度センサーとCSSのTransform2Dをあわせて使う | メイン | ATNDで参加者を募集しているイベントの参加者層を調べるGreasemonkey »

Gitのユーザマニュアルを読んでのメモ

Gitのユーザマニュアルの非公式日本語訳を読んでの個人的メモ。訳してくれた人に感謝。以下、個人的に実験した内容も含む。
gitkの起動時のオプション
gitkを起動するとき、「--all」をつけると、現在のブランチの履歴だけでなく、全てのブランチの履歴を見ることができる。gitkを起動するとき、「--not <ブランチ名>」とすると、指定されたブランチは表示されない。「gitk --all --not master」で、masterブランチ以外の全てのコミットを表示する。
強制pushと強制fetch
強制pushする時、「-f」の代わりに「+」でもいけるらしい。
git push -f ssh://(略) master
git push ssh://(略) +master

同様に、強制fetchする時、「-f」の代わりに「+」でもいけるらしい。
git fetch -f git://(略) master:ref/(略)
git fetch git://(略) +master:ref/(略)
リベースでコンフリクトした時の作業手順
1.「git status」でコンフリクトしているファイルを確認
2.「git mergetool」やその他のマージツール、または手作業で修正
3.「git add [修正したファイル名]」でコンフリクトが解消した事を通知
4.「git rebase --continue」でリベースを継続
※どの時点でも「git rebase --abort」でリベース前に戻せる
「.git/objects/」内のファイルの格納ルール
「.git/objects/」の下にはサブフォルダがあり、そのフォルダ名はオブジェクトIDの最初の2文字となっている。ファイル名はオブジェクトIDの最初の2文字を削除したものになっている。つまり、オブジェクトIDが「123456...」のファイルは、「.git/objects/12/3456...」に格納される。
リポジトリが破損した時用のメモ
「git fsck」でリポジトリの検証。「git fsck --full」で完全な検証を行える。
破損していた場合、破損したBLOBオブジェクトのIDやそれを参照しているツリーオブジェクト等の情報が表示される。リポジトリのクローン先やクローン元に破損したオブジェクトを入手し、「.git/objects/」配下に格納する。
破損したファイルが見つからなかった場合、「git ls-tree <ツリーID>」で破損したBLOBオブジェクトのファイル名を確認する。作業ディレクトリ内に運良く元のファイルらしきものが残っている場合、「git hash-object <ファイルパス>」でオブジェクトID確認できる。「git hash-object -w <ファイルパス>」でオブジェクトを生成し「.git/objects」配下に格納する。
元のファイルが見つからなかった場合、「git log --raw --all --full-history -- <ファイルパス>」でコミットの履歴を表示する。これにより、履歴の前後のコミットIDやコミット時のコミットメッセージが確認できるので、破損したファイルを再現できる可能性がある。再現できた場合、「git hash-object <ファイル>」でオブジェクトIDの確認、「git hash-object -w <ファイル>」でオブジェクトの登録を行う。
復旧できなかったとしても、紛失したオブジェクトは、特定のバージョンの特定のBLOBオブジェクトであるため、状況により「git fsck」の警告を無視することも可能らしい。
破損したBLOBオブジェクトの子孫にあたるファイルが残っているのであれば、履歴が分断する事にはなるが、リポジトリから一度ファイルを削除した後に子孫ファイルを再度登録したほうが安全ではないかと思った。
雑多なメモ
「git show」や「git log」に「--pretty=raw」をつけると、ツリーID、親コミットID等の詳細な情報を見ることができる。

「git mv」等でファイル名の変更があった場合、「git diff」は異なるオブジェクトとして認識するが、「git diff -M」とすると名前の変更を認識し、同一ファイルとして扱う。

Gitで管理するファイルのパーミッションは755か644のいずれかになる。Gitは実行権限だけを管理する。

「git ls-tree <コミットID>」でtreeの情報を表示できる。コミットIDを省略すると現在のコミット。
「git ls-show <レビジョン:パス>」でtreeやblobの中身を確認できる。

「git cat-file [blob|tree|commit|tag] <id>」でそれぞれの詳細な情報を表示できる。

「git tag」では、「軽量タグ」というものを作成できるらしい。詳細は不明。

「git count-objects」で、オブジェクト数を確認できる。

「git gc」は、「git repack」と「git prune」を実行する高レベルのコマンド。

「git ls-files --stage」で索引(index,ドキュメントによってはステージ(stage)と呼ぶこともある)の中を確認できる。

「git log branch1..branch2」branch1には含まれないがbranch2に含まれるコミットを一覧する。
「git log branch1...branch2」branch1かbranch2のどちらかにのみ含まれるコミットを一覧する。

「git diff branch1 branch2」と「git diff branch1..branch2」と「git diff branch1...branch2」の出力の違いがわからない。そのうち調べる。
その他
「Linuxのサブシステム管理者がtopicブランチを管理する方法」の部分が難しい。
サブモジュールは運用方法を気をつけないとまずそう。「Chapter 8. サブモジュール」をよく読むこと。
「Chapter. 9」以降は未整理。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

Google

タグ クラウド