我已经玩了一段时间,非常喜欢它。 让我来描述我的情况。
我有两台电脑,其中有我的存储库和一个远程存储库。
在我的文件中,我有一个配置文件,在这两台计算机上是不同的。 因此,当我在我的计算机上进行拉取操作时,我不需要拉取该配置文件,但需要拉取其他所有文件。 我该如何做到这一点?
我已阅读有关.gitignore文件的内容,但我无法弄清楚它们是如何工作的,或者它们是否适用于我的情况。
我已经玩了一段时间,非常喜欢它。 让我来描述我的情况。
我有两台电脑,其中有我的存储库和一个远程存储库。
在我的文件中,我有一个配置文件,在这两台计算机上是不同的。 因此,当我在我的计算机上进行拉取操作时,我不需要拉取该配置文件,但需要拉取其他所有文件。 我该如何做到这一点?
我已阅读有关.gitignore文件的内容,但我无法弄清楚它们是如何工作的,或者它们是否适用于我的情况。
.gitignore文件用于那些你还没有check in的文件/文件夹。它实质上是一个文本文件,你可以在仓库中创建,并列出相对于放置它的目录的路径,Git会忽略这些路径。你可以将 .gitignore 文件作为仓库的一部分 check-in。你可以在这个页面的末尾找到示例。
如果你的文件已经在仓库中被check in,那么可以使用:
git update-index --assume-unchanged file
这会告诉Git忽略该文件在未来所做的任何更改。但是这是一个本地配置,因此您需要在每台计算机上进行设置。您可以通过执行以下操作来撤消它:
git update-index --no-assume-unchanged file
根据配置文件的内容,将一个骨架/示例配置文件放在代码库里是一个好的做法。这类似于PHP中config_example.php的做法,人们可以使用它来创建config.php, 而config.php则不会被提交到代码库中,因为它被添加到了忽略列表中。
如果你想在代码库中忽略config.local
文件,只需创建一个.gitignore
文件,并在其中添加/config.local
一行,然后将其加入并提交到代码库即可。
.gitignore
文件的一部分内容:# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
*.pro.user.*
tmp/
release/
debug/
bin/
moc_*
ui_*
*.bck
*_debug
#Visual Studio stuff
lib/*.lib
*.ncb
*.suo
这只是文件的一部分。您需要根据项目进行调整。
关键是格式是灵活的,您不应该在共享文件时遇到问题。如果有问题,请将其从存储库中排除。
git status
状态显示的是什么 - 只是修改过的吗? - Derick Schoonbee.gitignore
文件可能是您需要的。在该文件中,您可以按每行一个的方式列出文件模式,这将导致 git status
不会报告这些文件。git pull
时它们仍然会被拉取。.gitignore
文件提交到存储库中。这样,所有计算机上都将忽略相同的文件。.gitignore
的注意事项:如果您不打算提交它,最好使用.git/info/exclude
。 - Michael Krelin - hackergit update-index --assume-unchanged file
如果你尝试切换分支,这并不会有所帮助。
$ git checkout master
error: Your local changes to the following files would be overwritten by checkout:
file
Please commit your changes or stash them before you switch branches.
Aborting
git update-index --assume-unchanged
对我有用(git
后面没有连字符)。使用的是 git 版本 1.8.1.2 - OS X 10.8.2。谢谢! - guapologit-COMMAND
而不是git COMMAND
,这就是答案中有连字符的原因。 - Ivan Zlatev这个选项也可以作为一种粗略的文件级别机制来忽略已跟踪文件中未提交的更改(类似于 .gitignore 对未跟踪文件所做的操作)。如果 Git 需要修改索引中的此文件,例如在合并提交时,则会失败(优雅地);因此,如果假定未跟踪的文件在上游发生了更改,则需要手动处理该情况。
- Ivan Zlatevgit pull --rebase origin master
更新本地副本的情况下,这会起作用吗?我已经尝试过了,但没有成功。我希望它在从远程获取时忽略一个文件。 - Sindhu Sh
标题行的git ls-files
中。因此,您可以像这里所述那样使用git ls-files | grep '^h'
列出它们:https://dev59.com/H2Qm5IYBdhLWcg3w-i9L#17195901。 - vmonteco