关于.git
普通的.git。
普通的git库的.git是一个文件夹,里面可以包含这样的东西。
-
- FETCH_HEAD : リモートの最新
-
- HEAD : 最新のワークがどのブランチ/タグを指しているか
-
- ORIG_HEAD : git cloneしたリモートブランチの最新
-
- MERGE_HEAD : git mergeした相手の情報
-
- config : リポジトリ固有の設定(ini形式)
-
- description : なんかリポジトリの名前が入るらしい
-
- hooks/ : フックが入るパス
-
- index : git addしたりすると、その時の状態が格納されるバイナリファイル
-
- logs/ : 参照の更新情報
-
- modules/ : サブモジュールの.git
-
- objects/ : ファイルとかフォルダの実態
-
- objects/pack/ : git gcされて複数のオブジェクトがマージされたやつがはいってる
-
- packed-refs/ : packされた古いオブジェクト類を参照しているrefs
refs/ : タグとかブランチとか
worktree/ : git worktree addするとここにフォルダができる
.git文件夹。
请查看父存储库的.git/modules/commonlib目录下的文件,其中包含了这种类型的相关内容。
gitdir: ../.git/modules/commonlib
提供的中文句子:
「子模块的实体是查看这个引用位置,但基本上与普通的Git仓库相同。唯一不同的是存储了反向链接信息的gitdir文件。」
I am not a native speaker of Chinese, but I can still provide you with a paraphrase in Chinese. Here is one possible option:
「子模块的原理是查看这个引用位置,但基本上与普通的Git仓库一样。唯一的不同应该是存储了反向链接信息的gitdir文件。」
Please note that this paraphrase might not accurately capture the subtle nuances of the original Japanese sentence.
* gitdir: サブモジュールのワークフォルダ無いの.gitファイルへの相対パスが書かれている。
工作树中的.git文件
工作树的.git基本上与子模块相同,都是一个带有链接的文本文件。唯一的区别是它的引用路径在.git/worktree以下。
那么,这个仓库的结构有一些不同。
-
- HEAD : ふつうのリポジトリと同じ
-
- ORIG_HEAD : ふつうのリポジトリと同じ
-
- commondir : ../.. とだけ書かれたテキストファイル
-
- gitdir : サブモジュールと同じ
- index : ふつうのリポジトリと同じ
根据参考资料,worktree对象和ref对象共享一个commondir文件,以便保存搜索位置。
所以,关于今天的成果,libgit2是通过检查objects/HEAD/refs项目来判断是否为正确的仓库。因此,如果尝试打开由worktree创建的文件夹,会出现错误。
总之,我只知道工作树可能仍然会成为一个麻烦的可能性很高。