1

私はいくつかrepo Aとを持っていrepo Bます。のプロジェクトは、からのプロジェクトにrepo A依存しますrepo B。一部のユーザーが自分からソースをプルしようとしたときに、からプルするときにrepo A、からrepo Aのソースrepo Bもいくつかのフォルダーにプルする必要があるようにしたいです。私は、SVNがいくつかのSVNリポジトリを他のSVNリポジトリにリンクできることを確認しました。どうすればgitリポジトリをリンクできますか?

ありがとう。

4

1 に答える 1

3

Gitにはこのためのサブモジュールがあります。

例:

$ git init repo_a
Initialized empty Git repository in /Users/messa/temp/submodule-example/repo_a/.git/
$ git init repo_b
Initialized empty Git repository in /Users/messa/temp/submodule-example/repo_b/.git/

$ cd repo_b
$ echo 'This is Project B.' >> README.txt
$ git add README.txt 
$ git commit -am 'Initial commit in B'
[master (root-commit) 5158772] Initial commit in B
 1 file changed, 1 insertion(+)
 create mode 100644 README.txt

$ cd ../repo_a
$ echo 'This is Project A, that depends on Project B.' >> README.txt
$ git add README.txt 
$ git commit -am 'Initial commit in A'
[master (root-commit) 7e8275b] Initial commit in A
 1 file changed, 1 insertion(+)
 create mode 100644 README.txt

$ git submodule add ../repo_b project_b
Cloning into 'project_b'...
done.
$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   new file:   .gitmodules
#   new file:   project_b
#
$ git commit -am 'Added submodule project_b'
[master c8fc469] Added submodule project_b
 2 files changed, 4 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 project_b

$ tree
.
├── README.txt
└── project_b
    └── README.txt

1 directory, 2 files

repo_bからのどのコミットがrepo_aからリンクされるかを正確に制御できます。

詳細については、git help submoduleまたは上記のリンクを参照してください。

ただし、問題が1つあります。誰かがrepo_aのクローンを作成すると、project_bはそこにありますが、空になります。後git clonegit submodule initそしてgit submodule update必要になります。

私はサブモジュールの実際の経験はありませんが、いくつかの批判を見てきました-たとえば、この記事。ほとんどの問題を回避するには、適切なワークフローを選択することが重要だと思います。

于 2012-10-26T13:08:20.740 に答える