我在开发VHDL代码时使用git。 我正在开发git分支中的组件:comp_dev。组件接口不会改变,只是组件内部的代码。现在,这个组件已经存在于master分支中,但是在一个更稳定的版本中,足以让其他开发人员能够使用该组件。其他开发人员也有他们工作的分支,当他们的代码很好时,他们将他们的分支合并回主人。
在这个阶段,我需要能够将所有更改从master返回到我的comp_dev分支,这基本上没问题,但有时我正在处理的组件的稳定版本会作为其他设计器的一部分进行更改工作,但不是界面。每次我想要合并时,我必须在该特定文件上进行手动git merge -s ours,否则我会遇到需要手动解决的冲突,抛弃他们的工作。
如果我想将其他文件中的更改合并回master,也会发生同样的情况。如果我在执行git merge之前忘记执行git merge -s src / rx / state_machine.vhd comp_dev,那么我最终会进行手动合并,或者我不小心将状态机的不稳定版本合并到了稳定的。
有没有办法暂时从合并中排除一个文件?
答案 0 :(得分:5)
我发布了一个适合我的解决方案here
答案 1 :(得分:3)
如果我理解正确,您希望将更改合并到所述组件(让我们将其命名为'C'),而您的工作重点是在其他模块上。你的工作的一个副作用是对“C”的微小改动,这恰好与其他人的工作相冲突,但是每当你将你的焦点工作推到你的“主人”的任何地方时,你都不希望合并“C”的麻烦是。
AFAIK,git中的更改集是原子的,不知道文件;所以没有办法从合并中排除文件,除了解决合并冲突,而不是你喜欢的修订。
可能还有另一种方法可以解决你的情况。
您可能希望将“C”分解为一个单独的库,并为其提供单独的git存储库。您的项目将拆分为多个存储库。但是不要害怕,git会让你通过子模块来管理它。
查看here了解有关如何操作的详细信息。
子模块允许您查看给定版本的“C”,并将您的工作重点放在源的不同部分。然后,您可以独立于任何人对“C”所做的更改来编辑,提交和合并您的工作。
关于并发更改的管理,开源版本控制的通常立场是VC不能代替与团队成员进行通信。同意一般的开发方法,尽量减少并发的不兼容的更改,并且开发过程将变得不那么痛苦。
答案 2 :(得分:0)
我和一些朋友聊了很多,我觉得如果你发现它有用,我会分享。
对于你正在尝试做的事情,改装和合并可能不太有用。一种更安全,更容易,更无聊,以及其他更可预测的方法,只能获取某些代码或某些文件,将使用git提供的方法手动移动补丁,如(a)樱桃挑选单个提交或(b)格式补丁和上午。如果您需要调整结果(如删除文件),请执行此操作并在新提交中解释原因。或者只是在你挑选或应用补丁时调整内容。我可以--interactive,并且可以使用commit -amend修改cherry-pick。我尝试了一个长期分支的另一个方法:合并一切,然后手动还原我真的不想合并的东西。这也很好。
其他似乎是个好主意的是using fine-grained branches。
我想我觉得一个关键的回家消息是,关注代码并拥有经常运行的良好自动化测试比掌握特定的git补丁/合并策略更重要。
答案 3 :(得分:0)
我已经开始使用git merge --no-commit --no-ff other_branch
,如下所述:
https://gist.github.com/katylava/564416
虽然我没有在临时分支中这样做,只是在我的工作功能分支中。
它确实需要你做更多的工作来挑选你想要保留的提交并丢弃其余的提交,但至少你知道你保留了什么以及你扔掉了什么。