繁体   English   中英

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

[英]How do you make Git ignore files without using .gitignore?

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

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

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

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

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

(另见这个问题


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

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

两者之间的区别在“ Git - ' assume-unchanged '和' skip-worktree '之间的区别”中进行了解释。

如果您可以修改.git/info/exclude ,则可以将相同的规则放在那里。 但该文件仅在您的本地存储库中。

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

  • .gitignore文件
  • $GIT_DIR/.git/info/exclude
  • 通过core.excludesfile设置指向的文件

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

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

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

*

IE

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

我遇到过类似的情况,所以我添加了我没有提到的首选解决方案。 在这种情况下, git update-index --assume-unchanged的问题是您不能对未跟踪的文件执行此操作。 你说

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

我将假设您的意思是您不能将对.gitignore的任何更改推送到原点。 如果是这种情况,您可以将未跟踪的文件添加到本地.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
  • 然后git update-index --assume-unchanged.gitignore

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM