我主要是TFVC人,但我有一个任务是在VSTS中设置一个git repo,然后从该父母那里获得2个子回购。 每个VSTS回购都属于另一家公司拥有的不同的真实账户。基本上每个人都想拥有他们孤立的回购,并且可以控制父和子回购之间的变更。 人们正在使用这些repos中的所有3个在相同的代码库上工作,并且可以在这3个repo中的任何一个中修改文件,并且在合并期间不应该丢失任何内容,因此很有可能出现合并问题。 这些孩子必须能够从Parent(按需)获得更改,并且最终需要将子项合并回父级,并且我希望将子级的所有历史详细信息保留在父级中,反之亦然。 我可以选择处理这种情况吗?
答案 0 :(得分:1)
Git的工作机制与TFVC截然不同。当您将两个repos视为子repo时,代码将存在于父repo中。所以它不需要合并回父母。
有些选项可以为您的情况提供帮助:submodules和 subtree
# In the parent repo
git submodule add <URL for child1>
git submodule add <URL for child2>
git commit -m 'message'
git push
当您进行/提交更改时,两个孩子会更改,并希望将更改分别推送到子仓库的远程,您可以使用:
git submodule foreach "git push"
如果遥控器上的儿童仓库更新,并且您希望从遥控器获取最新更改,则可以使用:
git submodule update --remote
# In the parent repo
git subtree add --prefix=child1 <URL for child1 repo> master
git subtree add --prefix=child2 <URL for child2 repo> master
git commit
git push
如果要将更改推送到子远程仓库,可以使用:
git subtree push --prefix=child1 <URL for child1 repo> master
git subtree push --prefix=child2 <URL for child2 repo> master
如果您想从子远程仓库获取更改到父仓库,您可以使用:
git subtree pull --prefix=child1 <URL for child1 repo> master
git subtree pull --prefix=child2 <URL for child2 repo> master
对于将儿童存储库的遥控器添加到父存储库,子存储库中的文件无法自动添加到父存储库的工作目录中:
# add remote and fetch children repos
git remote add child1 <URL for child1> -f
git remote add child2 <URL for child2> -f
即使你可以检查来自子仓库的文件,但它们位于父仓库中的不同分支(branch_child1和branch_child2)中:
git checkout -b branch_child1 child1/master
git checkout -b branch_child2 child2/master
如果要显示来自子repos和父repos的文件,可以将branch_child1和branch_child2合并到master分支中:
git checkout master
git merge branch_child1
git merge branch_child2
注意:如果父repo和子repos中的文件位于不同的子文件夹中,则可以顺利合并。否则它会使工作目录变得混乱。
总之,如果您的情况满足以下任何一个方面,您可以使用git remote add
。否则,你最好不要这样用: