有git父repo和2 childern repo使用VSTS

时间:2017-08-21 14:26:42

标签: git azure-devops

我主要是TFVC人,但我有一个任务是在VSTS中设置一个git repo,然后从该父母那里获得2个子回购。 每个VSTS回购都属于另一家公司拥有的不同的真实账户。基本上每个人都想拥有他们孤立的回购,并且可以控制父和子回购之间的变更。 人们正在使用这些repos中的所有3个在相同的代码库上工作,并且可以在这3个repo中的任何一个中修改文件,并且在合并期间不应该丢失任何内容,因此很有可能出现合并问题。 这些孩子必须能够从Parent(按需)获得更改,并且最终需要将子项合并回父级,并且我希望将子级的所有历史详细信息保留在父级中,反之亦然。 我可以选择处理这种情况吗?

1 个答案:

答案 0 :(得分:1)

Git的工作机制与TFVC截然不同。当您将两个repos视为子repo时,代码将存在于父repo中。所以它不需要合并回父母。

有些选项可以为您的情况提供帮助:submodules和  subtree

1。将两个子存储库添加为父存储库的子模块

# 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

2。使用子树将子仓库添加为父仓库中的两个文件夹

# 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。否则,你最好不要这样用:

  • 您可以在不同的分支机构中找到来自不同存储库的文件。
  • 不同仓库中的文件位于不同的文件夹名称中。
相关问题