私はいくつかrepo A
とを持っていrepo B
ます。のプロジェクトは、からのプロジェクトにrepo A
依存しますrepo B
。一部のユーザーが自分からソースをプルしようとしたときに、からプルするときにrepo A
、からrepo A
のソースrepo B
もいくつかのフォルダーにプルする必要があるようにしたいです。私は、SVNがいくつかのSVNリポジトリを他のSVNリポジトリにリンクできることを確認しました。どうすればgitリポジトリをリンクできますか?
ありがとう。
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 clone
、git submodule init
そしてgit submodule update
必要になります。
私はサブモジュールの実際の経験はありませんが、いくつかの批判を見てきました-たとえば、この記事。ほとんどの問題を回避するには、適切なワークフローを選択することが重要だと思います。