忽略文件:gitignore没有做我想要的

时间:2012-02-10 20:30:58

标签: git version-control

我搜索了互联网和SO,但无法解决这个问题。 我正在使用git。我有代码,它在计算机C1上有一个分支B1。在另一台计算机C2上,我克隆了这个分支并在本地,再创建了一个分支B2。 B2未被推送到中央存储库。

B1和B2完全相同,只有一个文件FILE1。所以我将该文件添加到.gitignore并在B2中提交。现在每当我在B1中进行编码时,我都会将其推送到中央存储库中。要在计算机C2上进行这些更改,我会

git pull origin B1

当我在分支B2时。但这会给出错误消息:

CONFLICT (content): Merge conflict in FILE1

我想问一下,如果有更好的方法可以将B1中的更改​​带到B2(不带FILE1),或者我如何改进当前的方法。感谢您的帮助,因为我是git的新手。

3 个答案:

答案 0 :(得分:4)

.gitignore文件用于忽略未跟踪的文件,例如已编译的*.o文件。将文件提交给Git后,.gitignore将不再适用。

解决问题的常用方法是创建一个基本“样本”文件并将其存储在存储库中(而不是真实文件)。例如,如果您有一个名为foobar.config的文件,则创建一个包含适当内容的foobar.config.sample文件并将其放入存储库中。另外,删除foobar.config文件。然后,对于需要配置文件的每个结帐,请将foobar.config.sample复制到foobar.config并根据需要进行修改。

另一种方法可能是让您的代码识别“本地”配置文件。因此,您可以将foobar.config的公共部分放入存储库,您的代码也会查找foobar.config.local文件并使用本地设置覆盖主foobar.config文件中的任何设置。

答案 1 :(得分:1)

我认为你误解了.gitignore的目的:

  

gitignore文件指定git应忽略的故意未跟踪文件。 git已经跟踪的文件不受影响。

因此,如果您的文件已被Git跟踪(在您的情况下似乎是这样),则将其添加到.gitignore不会改变任何内容。

当您遇到合并冲突时,这意味着该文件已在您当前的工作树和您要合并的位置(在您的情况下,远程存储库)中进行了更改。您**必须*解决任何和所有合并冲突。有很多资源可以解决合并冲突,其中包括Git User Manual。您还可以specify that Git use the local or remote copy to resolve conflicts

git pull -Xtheirs origin B1

如果您从未打算跟踪该文件,可以将其删除:

git rm --cached myfilename

As Greg mentions,如果您的意图是将文件作为模板配置,请将其命名为,然后将其复制并将专用版本添加到.gitignore

答案 2 :(得分:1)

如果您已经意外检入了foo.txt文件,并且可以通过其他方式重新创建它(例如通过编译某些来源),您可以git rm /path/to/foo.txt将其从版本控制中删除,然后.gitignore 1}}也会做你想做的事。