【发布时间】:2010-10-13 19:10:23
【问题描述】:
由于外部奇怪的限制,我无法修改存储库的 .gitignore。除了修改.gitignore 之外,有没有办法忽略文件和目录?即使它是一个全局解决方案,例如将应用于我所有存储库的全局配置。
【问题讨论】:
标签: git version-control
由于外部奇怪的限制,我无法修改存储库的 .gitignore。除了修改.gitignore 之外,有没有办法忽略文件和目录?即使它是一个全局解决方案,例如将应用于我所有存储库的全局配置。
【问题讨论】:
标签: git version-control
如果您可以修改.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/excludecore.excludesfile 设置指向的文件后两点可以解决你的问题。
如需更多信息,请参阅gitignore(5)。
【讨论】:
不要忘记,根据gitignore,Git 考虑的不同“忽略模式源”中存在优先顺序:
$GIT_DIR/info/exclude读取的模式。core.excludesfile指定的文件中读取的模式。最后两个可以解决您的问题,但是:
(另见SO question)
另外两个解决方案涉及更新索引 (git update-index):
git update-index --assume-unchanged:见“Git: untrack a file in local repo only and keep it in the remote repo”。git update-index --assume-unchanged on directory”。 --no-assume-unchange反转效果:见“Is it possible to git add a file currently protected by assume-unchanged?”。但是,当您签出另一个分支或git pull 时,“忽略”状态可能会被重置。因此,另一种选择:
git update-index --skip-worktree;看:
两者的区别在“Git - Difference Between 'assume-unchanged' and 'skip-worktree'”中有说明。
【讨论】:
update-index --assume-unchanged @see stackoverflow.com/a/25253144/292408
update-index --skip-work-tree。我已经编辑了答案,以添加一些指向我的旧答案的链接,以说明这两个 update-index 命令。
忽略对跟踪文件的本地更改:
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.
【讨论】:
如果您只想在存储库中有一些本地文件并且子目录位置灵活,您可以将文件放在tracked_dir1/tracked_dir2/untracked_dir/,然后添加tracked_dir1/tracked_dir2/untracked_dir/.gitignore,内容如下:
*
即
$ cat > tracked_dir1/tracked_dir2/untracked_dir/.gitignore
*
<Ctrl+D>
【讨论】:
可以使用全局的gitignore方法,而不是在项目中修改那个 https://help.github.com/articles/ignoring-files/#create-a-global-gitignore
【讨论】:
我遇到过类似的情况,所以我添加了我没有提到的首选解决方案。在这种情况下,git update-index --assume-unchanged 的问题在于您不能对未跟踪的文件执行此操作。你说
我无法修改存储库的 .gitignore。
我将假设您的意思是您不能将对 .gitignore 的任何更改推送到原点。如果是这种情况,您可以将未跟踪的文件添加到本地.gitignore,然后执行git update-index --assume-unchanged .gitignore,这样您对.gitignore 的更改就不会被推送。现在您将忽略(可能)未跟踪的文件,并且不会影响远程 .gitignore 文件。
【讨论】:
另一种方式:
.gitignore
git update-index --assume-unchanged .gitignore
【讨论】: