如何让Git忽略文件而不使用.gitignore?

由于外部奇怪的限制,我无法修改我的仓库的.gitignore。 有没有办法忽略修改.gitignore以外的文件和目录? 即使这是一个像全局configuration的全局解决scheme,将被应用于我的所有仓库。

根据gitignore的说法 ,不要忘记Git认为在不同的“忽略模式来源”中有一个优先顺序:

  • 从命令行读取模式以查看那些支持它们的命令。
  • 从path相同目录或任何父目录中的.gitignore文件中读取的模式(高级文件中的模式(直到根))被低层文件中的模式覆盖到包含该文件的目录。
  • $GIT_DIR/info/exclude读取模式。
  • 从configurationvariablescore.excludesfile指定的文件中读取模式。

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

  • 它们不会被复制到遥远的存储库
  • 他们的模式可以被其他来源所覆盖

(也见这个问题 )


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

  • git update-index --assume-unchanged :请参阅“ Git:只在本地回购一个文件,并将其保存在远程回购 ”。
    以利亚·林恩在评论中提到。
    • 你甚至可以忽略一个文件夹的内容:“ git update-index --assume-unchanged directories on directory ”。
    • 使用--no-assume-unchange反转效果:请参阅“ 是否可以git add一个当前受到保护的文件assume-unchanged吗? ”。

但是,当你签出另一个分支或当你git pull ,这个“忽略”状态可能会被重置。 因此另一个select:

  • git update-index --skip-worktree ; 看到:
    • “ 忽略我在文件中的更改,但不要从远程代表删除 ”和
    • “ 在分支签出之间保留git –assume – 不变的文件 ”。

两者之间的区别在“ Git – assume-unchanged ”和“ skip-worktree ”之间skip-worktree

如果你可以修改.git/info/exclude你可以在那里放置相同的规则。 但该文件只在您本地的回购中。

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

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

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

欲了解更多信息,请参阅gitignore(5) 。

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

*

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

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