Answers:
根据gitignore的描述,请不要忘记Git考虑的不同“忽略模式源”中有一个优先顺序:
$GIT_DIR/info/exclude
。core.excludesfile
。最后两个可以解决您的问题,但是:
(另请参见此SO问题)
其他两个解决方案涉及更新索引(git update-index
):
git update-index --assume-unchanged
:请参阅“ Git:仅在本地存储库中取消跟踪文件,并将其保留在远程存储库中 ”。Elijah Lynn在评论中git update-index --assume-unchanged
目录 ”。 --no-assume-unchange
扭转效应:见“ 是否可以git add
当前保护的文件assume-unchanged
? ”。但是,当您签出另一个分支或您时git pull
,可能会重置该“忽略”状态。因此,另一个选择是:
git update-index --skip-worktree
; 看到:
两者之间的差异在“ Git- assume-unchanged
'和' skip-worktree
' 之间的差异 ”中进行了说明。
update-index --skip-work-tree
。我编辑了答案,以添加指向我的旧答案的链接,以说明这两个update-index
命令。
如果可以修改.git/info/exclude
,则可以在其中放置相同的规则。但是该文件仅在您的本地存储库中。
.git
子模块中没有目录...
.git
文件夹实际上位于parent_repo/.git/modules/submodule_name
。所以您要编辑parent_repo/.git/modules/submodule_name/info/exclude
可以通过三种方法告诉GIT忽略哪些文件:
.gitignore
档案$GIT_DIR/.git/info/exclude
core.excludesfile
设置指向的文件后两点可以解决您的问题。
有关更多信息,请参见gitignore(5)。
我曾经遇到过类似的情况,所以我添加了我未提及的首选解决方案。git update-index --assume-unchanged
在这种情况下,问题在于您无法对未跟踪的文件执行此操作。你说
我无法修改存储库的.gitignore。
我将假设您的意思是您不能将任何更改推.gitignore
到原始位置。如果是这种情况,您可以做的就是将未跟踪的文件添加到local .gitignore
,git update-index --assume-unchanged .gitignore
这样.gitignore
就不会更改您的更改。现在,您将忽略(可能是)未跟踪的文件,并且不会影响远程.gitignore
文件。
忽略对跟踪文件的本地更改:
git update-index --assume-unchanged my-file.php
忽略对跟踪文件的本地更改:
git update-index --no-assume-unchanged my-file.php
资源: git help update-index
--[no-]assume-unchanged
...
This option can be also used as a coarse file-level mechanism to ignore uncommitted changes in tracked
files (akin to what .gitignore does for untracked files). Git will fail (gracefully) in case it needs to
modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is
changed upstream, you will need to handle the situation manually.
您可以使用全局gitignore方法,而不用修改项目 https://help.github.com/articles/ignoring-files/#create-a-global-gitignore中的方法
update-index --assume-unchanged
@see stackoverflow.com/a/25253144/292408