【问题标题】:how to configure git to identify changes made by another developer as a conflict如何配置 git 以将其他开发人员所做的更改识别为冲突
【发布时间】:2013-12-07 16:41:48
【问题描述】:

我试图弄清楚我们是否可以设置 git 将任何已被两个或多个开发人员更改的文件标记为冲突 - 无论该文件中的相同行是否被修改。这是一个例子:

两个开发人员首先在他们的本地机器上克隆一个远程仓库。开发人员 1 对文件 A 进行了更改。由于他是第一个更改文件的开发人员,因此没有冲突,然后他将更改提交到本地存储库,然后将更改推送到远程存储库。在开发人员 1 工作时,开发人员 2 也在处理同一个文件,但在完全不同的区域中,因此没有重叠的代码行。开发人员 2 然后将他的更改提交到他的本地存储库,然后进行拉取。此时,git似乎会自动合并行。

有时这没关系。但是,在其他时候,这绝对是不正确的,并且该文件需要在被推送到远程仓库之前进行审查和更新。这非常重要并且经常发生,以至于我们真的想在将它们推送到存储库之前将其应用于所有文件。所以,问题是 - git merge 是否可以配置为在上次拉取后被另一个开发人员更改时将文件识别为冲突?我看过 git merge 命令here。尽管它提供了合并策略,但我没有看到任何可以提供这种功能的东西。实现此功能也不难。需要做的就是确定文件 A 的开发人员本地 repo 版本(来自上次拉取)是否与远程 repo 中文件 A 的当前版本匹配。如果不是,则将其标记为冲突。有什么方法可以做到这一点,或者我们可以使用任何其他想法来识别已更改并需要在推送到存储库之前进行审查的文件?

【问题讨论】:

  • 到目前为止,我只看了标题,但听起来很糟糕……冲突的概念在 Git 中得到了很好的定义。您是否试图让 Git 识别不存在的冲突?
  • @MarcellFülöp 我希望能够检测到另一个开发人员何时更新了远程仓库,因为它被另一个开发人员拉下,以便开发人员可以在签入之前决定是否需要更新他的更改。如果 git 做不到,那么也许有一个 gui 工具可以做到?

标签: git version-control repository git-merge git-rebase


【解决方案1】:

我会说:不要尝试在 git merge 内部执行此操作。相反,请使用外部脚本执行此操作。 (当然,让开发人员使用脚本可能会遇到一些问题 :-))

然后您可以按照您建议的方式使该脚本工作:比较“在 repo 中的文件作为基础,与在 repo 中的文件作为刚刚之前-(合并/rebase)”:

# if on branch foo that maps to origin/foo
git tag compare-foo <commit-id>
git fetch origin
git diff <optional-args> compare-foo origin/foo
# or use git diff-tree and do your own post-processing
# add more stuff to compare the merge-base to the
# developer's version of branch foo to identify files
# that were modified by "both"
# when all satisified: git tag -d compare-foo

要选择提交 ID,您可以使用 git merge-base,例如:

cid=$(git merge-base foo origin/foo)

或者您必须假设origin/foo 是正确的点,即开发人员运行此过程而不是通过直接执行git fetch 来更新origin/foo。 (或者,请参阅下面的幻想。)

您可能希望通过要求开发人员“签署”某种“我进行了比较,一切正常”声明来完善这个过程。细节将取决于您和开发人员,这将推动机制(例如,您可能希望在 refs/tags 名称空间之外创建引用和/或使用具有不同于通常注释的名称空间的 git notes )。一旦签署,这可以作为后续比较的起点,如果其他开发人员在成功推送提交方面“击败他们”。

注意:这不能替代实际测试(但是,测试也不能替代观察自己与他人的变化)。

【讨论】:

  • 有没有像GitExtensions这样的git gui工具可以用来输入脚本,然后对每个不同的文件依次调用不同的程序?
  • 我主要避免使用大多数 GUI。我有时使用 gitk 来可视化分支,仅此而已。所以,我不知道你如何通过 GUI 或使用 GUI 来驱动它。
猜你喜欢
  • 2021-05-19
  • 2013-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-25
  • 1970-01-01
  • 1970-01-01
  • 2013-11-04
相关资源
最近更新 更多