对于不应提交的已更改文件的正确git过程?

时间:2011-10-17 17:34:21

标签: git git-svn

我刚刚继承了一个包含多个配置文件的现有代码库。这些配置文件都是通用的,用于为下载到的每台计算机进行编辑和自定义。 Git(显然)告诉我他们已经被编辑过,而且每次我git status时都会在“未提交的更改”下显示它们。如何在git下忽略这些文件?将它们添加到.gitignore不起作用,因为它们已被git跟踪。我不想对repo做任何事情,但同时我想告诉git不再在我的本地机器上跟踪这些文件。有没有办法做到这一点,我不知道?我知道我可以git stash他们,他们将不再被展示,但我觉得这不是真正意义上的......我错了吗?

不确定这是否会发生任何变化,但我在本地计算机上使用git-svn与SVN服务器进行交互。

5 个答案:

答案 0 :(得分:4)

不要将配置文件存储在存储库中。您可以在存储库中存储这些文件的示例版本或它们的“通用”版本,但可以使用其他名称进行存储。

如果有多个并且它们位于自己的目录中,请创建一个单独的目录以在存储库中保存通用版本。如果只有一个或两个并且它们没有自己的目录,请使用文件名。您可以将-default-example之类的内容添加到存储库中存储的版本中。

答案 1 :(得分:4)

要忽略git已经跟踪过的文件,我设置了一个git别名(实际上只是birryree建议的那样,但更方便)。将其添加到.gitconfig:

[alias]
  ignore = !git update-index --assume-unchanged
  unignore = !git update-index --no-assume-unchanged
  ignored = !git ls-files -v | grep "^[[:lower:]]"

然后,您可以git ignore foogit unignore foogit ignored列出被忽略的文件。

答案 2 :(得分:2)

我做了类似David Schwartz建议的事情,即创建类似database.yml.template之类的shell /模板配置,然后复制该文件并将其配置为我的环境database.yml。然后我可以.gitignore这些新文件。

如果你想这样做而不修改repo中文件的存在方式,那么:

git update-index --assume-unchanged [filename]

会让git忽略对该文件的更改,但你必须意识到这样做。

此处提供更多信息:http://gitready.com/intermediate/2009/02/18/temporarily-ignoring-files.html

答案 3 :(得分:2)

我的建议是:

  1. *.properties重命名为*.properties.example
  2. *.properties.example添加到存储库
  3. 从存储库中删除*.properties
  4. *.properties添加到.gitignore

答案 4 :(得分:0)

您想使用skip-worktree位,而不是assume-unchanged位。

git update-index --skip-worktree [filename]

请参阅this question了解为什么这种情况比assume-unchanged更受欢迎,this webpage对于某些影响更为明确。

基本上,skip-worktree非常努力地保留对文件的更改,但是当您执行某些操作时,assume-unchanged可能会丢失它们。

相关问题