0

それで、私は git サブモジュールについてもう少し学んでいます。どこを読んでも、サブモジュールを追加した後、切り離された HEAD になってしまうことがわかります。これは、どのコミットを使用する必要があるかをスーパープロジェクトに具体的に知らせたいため、理にかなっています。ただし、実際に見ているものではありません (Mac OS X)。

1 つのファイルを含むクイック レポジトリ (sub と呼ばれる) を作成し、それをサブモジュールとして blah と呼ばれる別のレポに追加する次の一連のコマンドを検討してください。

/tmp> git version 
git version 1.7.12.4 (Apple Git-37)
/tmp> git init sub
Initialized empty Git repository in /private/tmp/sub/.git/
/tmp> cd sub
/tmp/sub> touch a.txt
/tmp/sub> git add a.txt
/tmp/sub> git commit -m "add a file"
[master (root-commit) c527790] .
 0 files changed
 create mode 100644 a.txt
/tmp/sub> cd ..
/tmp> git init blah
Initialized empty Git repository in /private/tmp/blah/.git/
/tmp> cd blah
/tmp/blah> git submodule add /tmp/sub sub
Cloning into 'sub'...
done.
/tmp/blah> cd sub
/tmp/blah/sub> git status
# On branch master
nothing to commit (working directory clean)

サブモジュールが master ブランチにあるのはなぜですか? 私はそれが枝にないと言うことを期待していたでしょう。もう少し掘り下げると、git が正しいコミット ハッシュを参照していることが示唆されますが、切り離された HEAD ではなく、どういうわけか master ブランチ上にあります。

/tmp/blah/sub> cd ../../sub
/tmp/sub> git reflog
97b97b3 HEAD@{0}: commit (initial): add a file
/tmp/sub> cd ../blah
/tmp/blah> git submodule status
 97b97b349cfae8da490c2cad3b3f4fc3af6a53c7 sub (heads/master)

私は何が欠けていますか?どうもありがとう。

4

1 に答える 1

3

このコマンドの実行:

git submodule add /tmp/sub sub

通常のclone操作になりますので、最終的HEADにはマスターブランチになります。gitただし、結果のコミットを調べると、リポジトリに明示的なコミットハッシュが記録されていることがわかります。

blahリポジトリ内から:

$ git commit -m 'added submodule'
[master (root-commit) 13e36eb] added submodule
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 sub
$ git log --oneline
13e36eb added submodule
$ git cat-file -p 13e36eb
tree 5d205c2e2ce63d8087b3b6644e3ac183cd49c644
author Lars <lars@> 1363184265 -0400
committer Lars <lars@> 1363184265 -0400

added submodule
$ git cat-file -p 5d205c2e2ce63d8087b3b6644e3ac183cd49c644
100644 blob 30c9a7559a85f36bcedaabb8bdfaf43363966b85    .gitmodules
160000 commit 2122e5378b7940afae8e49ad9179c815c7711610  sub

その最後の行( )は、サブモジュール用に記録され160000 commit ...たコミットハッシュを示しています。git

サブモジュールを使用してリポジトリのクローンを作成する場合...

cd /tmp
git clone --recursive blah cloned-blah

sub通常のクローン操作の代わりに明示的なコミットをチェックアウトしたため、これはブランチ上にないことがわかります。

于 2013-03-13T14:16:09.983 に答える