我刚刚继承了一个包含多个配置文件的现有代码库。这些配置文件都是通用的,用于为下载到的每台计算机进行编辑和自定义。 Git(显然)告诉我他们已经被编辑过,而且每次我git status
时都会在“未提交的更改”下显示它们。如何在git下忽略这些文件?将它们添加到.gitignore不起作用,因为它们已被git跟踪。我不想对repo做任何事情,但同时我想告诉git不再在我的本地机器上跟踪这些文件。有没有办法做到这一点,我不知道?我知道我可以git stash
他们,他们将不再被展示,但我觉得这不是真正意义上的......我错了吗?
不确定这是否会发生任何变化,但我在本地计算机上使用git-svn与SVN服务器进行交互。
答案 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 foo
,git unignore foo
或git 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)
我的建议是:
*.properties
重命名为*.properties.example
*.properties.example
添加到存储库*.properties
*.properties
添加到.gitignore
答案 4 :(得分:0)
您想使用skip-worktree
位,而不是assume-unchanged
位。
git update-index --skip-worktree [filename]
请参阅this question了解为什么这种情况比assume-unchanged
更受欢迎,this webpage对于某些影响更为明确。
基本上,skip-worktree
非常努力地保留对文件的更改,但是当您执行某些操作时,assume-unchanged
可能会丢失它们。