在VS中维护同一个基础项目的多个分支
我浏览过这个网站,但是我找不到完全覆盖我的答案,所以如果我错过了,请提前原谅我。
我继承了一个没有源代码控制的VB.NET项目(它开始作为一个长期以来的开发者的宠物项目,并且没有人曾经为此而烦恼过),并且根据朋友的建议,我考虑过使用Git源代码管理。
该项目是根据客户的规格定制和销售的利基产品,因此即使95%的代码对所有客户都是相同的,但有时高达10%的代码也会改变和定制对于每个客户,通过改变或添加现有功能的行,有时会添加整个代码块,但不同客户之间的更改没有共同之处(在另一个中更改的功能可能不会更改)。
更复杂的是,由于维护合同,对基线应用程序的更新必须在客户的分支机构中复制,如果他们需要它们,有时候我们为特定客户做出的更改足够好,我们希望将它们放入基线应用程序并将其复制到其他客户,但保留每个客户的定制!
所以,凭借我对Git的一点知识,我认为它会是这样的:
(customer 1)
C1-----
(main) /
A------B------D
(customer 2)
C2-----
(customer 3)
C3-----
......但是我不明白它会如何工作:
如果它与另一个答案重叠,谢谢并再次抱歉。
我对git比较陌生,通常在我的所有操作中都使用PoshGit,所以虽然我可能无法帮助您处理所有事情,但我希望我可以帮助您解决一些问题:
根据我的理解,这两个操作都可以通过使用git cherry pick来实现,它允许你从一个分支中选择一个特定的提交,并将其添加到另一个分支,而不需要将分支合并到一起。
例如,假设您想要将对customer1的存储库所做的更改添加到customer2中:
首先,您获取要插入到customer2中的来自客户1的提交的哈希ID
git checkout customer1Branch
git log
commit 2e8c40025939e8cf41dec70f213da75aa462184b
Author: xxxxxxx
Date: xxxxxx
This made a change that you want...
然后,您复制要挑选的哈希的前几个字符,更改为客户2的分支,然后樱桃将其选入分支。
git checkout customer2Branch
git cherry-pick 2e8c40025939e8c
现在,如果你做了一个git log
,你会在顶部看到你的樱桃选择。 可以在这里找到类似的教程(http://nathanhoad.net/how-to-cherry-pick-changes-with-git)
您可能会在这里找到并回答类似问题的帮助:
在Git中只提交一部分文件
由于GIT是完全分布式VCS,您团队中的每个开发人员都将在自己的机器上有效地完成中央回购的克隆(完整回购的历史记录)。这意味着日志历史查询和其他请求(例如查找谁做了什么)不需要通过中央服务器,但可以由每个开发人员私下和离线完成。
同样,每个开发人员所做的更改都可供所有人使用(例如,所有新分支都可用),但如果您不习惯使用git,则有时可能会因使用相同的功能而感到沮丧。
像往常一样,它是一个很好的主意,可以提早并且经常地进行,这将减少当更改发生冲突时您可能面临的紧张情绪。 你也应该设置一些结构来完成推动,特别是如果你依靠对方的工作继续下去。
您可能想要尝试的另一个想法是让一个人负责回购,并让他合并更改和补丁以帮助协调您的工作。
编辑
感谢您澄清这个问题的含义。 你可以扩展一个类似的方法,从这里给出的答案改编:你如何创建一个远程Git分支?
为BASE项目创建一个新的主线分支并将其推送到远程存储库。
cd baseProjectDirectory # navigate to your main project directory
git init # git initialize the dir
git add . # recursively add all files in directory to git repo
git remote add <remote-branch-name> <remote-url> # Add the url to your remote directory to your git repo
git commit -m "Initial commit of base project"
git push <remote-branch-name> <local-branch-name>
这将在名为local-branch-name
下的名为remote-branch-name
的远程存储库上建立基线项目。
然后,您可以浏览到其他项目,重复以上步骤把你的仓库放在同一个遥控器上的不同分支,通过使用新的本地分支机构的名称,即而不是使用local-branch-name
创建分支时,只使用一个新的分支名称,比如git checkout -b new-local-branch-name
所以如果你的基础项目推动(最后一行代码)是:
git push clientproject base
其中“clientproject”是您的远程名称,“base”是您本地分支的名称,您可以将该行更改为:
git checkout -b client1 # Creates new branch named client1
git branch -d base # Deletes base branch
git push clientproject client1
请注意,尽管在继续之前删除“基本”分支并不是绝对必要的,但它确实使您的存储库更加清洁,因此被认为是最佳做法。 不要担心丢失任何东西,但是您的整个基地git历史记录将在结帐时复制到client1。
另外请注意:由于您的情况要求您从不同的目录执行此操作,因此您可能会删除名为“master”而不是“base”的分支。
像这样推动将client1保留在“clientproject”远程,但将把项目置于一个叫做client1的新分支上,并完成自己的历史记录。
其余的项目可以使用相同的步骤。 如果我在途中丢失了你,我建议阅读上面的链接(它比我更简洁)。
我还没有在Git中使用过VS,但是我认为大部分操作都会被支持,因为它们是原生的git命令。
希望这可以帮助。
链接地址: http://www.djcxy.com/p/4193.html上一篇: Maintaining multiple branches of the same base project in VS
下一篇: CMake compiler settings specific to the local working copy