为什么" git pull"如果主分支也检查了完全相同的文件,则会失败?

时间:2014-03-20 14:59:48

标签: git

我不小心将同一个文件添加到两台不同机器的git repo中。在机器A上添加/提交/将其推送到中央仓库。机器B做了添加和提交,然后我做了“拉”。

如果我使用文本文件执行此操作,git会执行合并(由于文件相同,因此可以正常工作)。我假设合并是必需的,因为提交消息不完全相同。我尝试使它们相同,并发现即使我在两个提交中将datestamp设置为相同,它们也会获得不同的提交哈希值。也就是说,git做了一个干净的合并,很高兴。

如果我使用二进制文件(例如,PDF)执行此操作,git会发现该文件存在于两个位置并且只是放弃。

以下是机器B上发生的二进制文件的记录:

$ git pull --rebase
remote: Counting objects: 24, done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 18 (delta 12), reused 0 (delta 0)
Unpacking objects: 100% (18/18), done.
From ssh://redacted.org/home/git/tposana3
   7c8fa64..480fff1  master     -> origin/master
First, rewinding head to replay your work on top of it...
error: The following untracked working tree files would be overwritten by checkout:
  edition3/vol2/reviews/vol2-18-capacityplan-DE.pdf
Please move or remove them before you can switch branches.
Aborting
could not detach HEAD
$ cd ../reviews/
$ mv vol2-18-capacityplan-DE.pdf vol2-18-capacityplan-DE.pdf.NOT
$ git pull --rebase
First, rewinding head to replay your work on top of it...
Fast-forwarded master to 480fff14f9462bc5dd975d27e328dcd9ce89f2ff.
tlimwork:~/gitthings/tposana3/edition3/vol2/reviews$ md5 *vol2-18-*
MD5 (vol2-18-capacityplan-DE.pdf) = 521d2d9839bbbaa269b11eaddaacc904
MD5 (vol2-18-capacityplan-DE.pdf.NOT) = 521d2d9839bbbaa269b11eaddaacc904

正如您所看到的那样,文件是逐位的。

我明白git会说,“哦!这些是二进制文件。我甚至不打算合并它们!”但是由于文件是逐位的,所以它不应该与文本文件具有相同的行为吗?

1 个答案:

答案 0 :(得分:1)

它不是试图合并它们,也不会对文件是否为二进制有任何区别。 Git正在检查将受合并影响的文件,并查看工作目录以确定这些位置是否有任何未跟踪的文件。

在你的情况下,有,这是一个问题。它不打算查看工作目录内容,因为你不处于合并事物的状态。

如果此文件已提交或暂存,您将看到您期望的行为。但是未经跟踪的文件很珍贵。