2012-02-10 91 views
3

我搜索了互联网和SO,但无法解决这个问题。 我使用的是git。我有代码,在计算机C1上有一个分支B1。在另一台计算机C2上,我克隆了这个分支,并在本地创建了另一个分支B2。 B2不会推送到中央存储库。忽略文件:gitignore没有做我想做的

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

git pull origin B1 

而我在分支B2上。但是,这给了错误消息:

CONFLICT (content): Merge conflict in FILE1 

我想问问,如果引进B1作出B2变化的一个更好的方式(不使FILE1)或如何才能提高我目前的方法。感谢您的帮助,因为我是git的新手。

+1

.gitignore适用于您不希望版本化EVER的文件,不适用于从版本控制中删除文件。理想情况下,您想要解决文件之间的冲突,因为在创建分支B2后,B1中的内容发生了变化。 – twilson 2012-02-10 20:36:09

回答

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 

如果你从未想过跟踪文件,你可以untrack它:

git rm --cached myfilename 

As Greg mentions,如果你的目的是让该文件是一个模板配置,将其命名为如此,然后复制它并将专用版本添加到.gitignore

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

如果你有意无意检查了你的foo.txt文件并且可以通过其他方式重新创建它(比如通过编译某些源代码),你可以从版本控制中删除它,然后.gitignore也会做什么你要。