如何在不使用.gitignore的情况下让Git忽略文件?

时间:2009-03-17 09:00:14

标签: git version-control

由于外部奇怪的约束,我无法修改我的存储库的.gitignore。除了修改.gitignore之外,有没有办法忽略文件​​和目录?即使它是全局配置的全局解决方案,也将应用于我的所有存储库。

8 个答案:

答案 0 :(得分:146)

根据gitignore,不要忘记Git认为不同的“忽略模式源”中存在优先顺序:

  • 从命令行读取的模式支持那些支持它们的命令。
  • 从与路径相同的目录中的.gitignore文件中读取的模式,或在任何父目录中读取的模式,较高级别文件(直到根目录)中的模式被较低级别文件中的模式覆盖到包含该目录的目录中文件。
  • $GIT_DIR/info/exclude
  • 读取的模式
  • 从配置变量core.excludesfile指定的文件中读取的模式。

最后两个可以解决您的问题,但是:

  • 它们不会被复制用于远程存储库
  • 他们的模式可以被其他来源覆盖

(另见SO question


另外两个解决方案涉及更新索引(git update-index):

但是,当您签出另一个分支或git pull时,可能会重置“忽略”状态。因此另一种选择:

Git - Difference Between 'assume-unchanged' and 'skip-worktree'”中解释了两者之间的区别。

答案 1 :(得分:112)

如果您可以修改.git/info/exclude,则可以在此处添加相同的规则。但该文件仅在您的本地仓库中。

答案 2 :(得分:20)

有三种方法告诉GIT要忽略哪些文件:

  • .gitignore files
  • $ GIT_DIR / git的/信息/排除
  • 通过core.excludesfile设置
  • 指向的文件

后两点可以解决你的问题。

有关详细信息,请参阅gitignore(5)

答案 3 :(得分:3)

如果您只想在存储库中放置一些本地文件并且子目录位置灵活,您可以将文件放在tracked_dir1/tracked_dir2/untracked_dir/中,然后添加tracked_dir1/tracked_dir2/untracked_dir/.gitignore,内容如下:

*

$ cat > tracked_dir1/tracked_dir2/untracked_dir/.gitignore
*
<Ctrl+D>

答案 4 :(得分:2)

我一直处于类似的情况,所以我添加了我不喜欢的首选解决方案。在这种情况下,git update-index --assume-unchanged的问题在于您无法对未跟踪的文件执行此操作。你说

  

我无法修改我的存储库的.gitignore。

我将假设你的意思是你不能将.gitignore的任何更改推送到原点。如果是这种情况,您可以执行的操作是将未跟踪的文件添加到本地.gitignore,然后执行git update-index --assume-unchanged .gitignore,以便永远不会推送您对.gitignore的更改。现在您忽略了(可能)未跟踪的文件,而不会影响远程.gitignore文件。

答案 5 :(得分:1)

忽略对跟踪文件的本地更改: 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.

答案 6 :(得分:0)

您可以使用全局gitignore方法,而不是修改项目中的方法 https://help.github.com/articles/ignoring-files/#create-a-global-gitignore

答案 7 :(得分:0)

另一种方式:

  • 编辑本地.gitignore
  • 然后git update-index --assume-unchanged .gitignore