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

j91ykkif  于 2023-03-06  发布在  Git
关注(0)|答案(9)|浏览(245)

由于外部奇怪的约束,我无法修改我的仓库的.gitignore。除了修改.gitignore之外,有没有其他方法可以忽略文件和目录?即使它是一个全局解决方案,比如将应用于我所有仓库的全局配置。

tuwxkamq

tuwxkamq1#

不要忘记,根据gitignore,Git考虑的不同"忽略模式源"有一个优先顺序:

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

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

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

(See也是这个SO问题)
其他两种解决方案涉及更新索引(git update-index):

Elijah Lynn在评论中提到了这一点。

然而,当你 checkout 另一个分支或者当你git pull时,"忽略"状态可能会被重置。

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

rjee0c15

rjee0c152#

如果你可以修改.git/info/exclude,你可以把同样的规则放在那里,但是那个文件只在你的本地存储库中。

u2nhd7ah

u2nhd7ah3#

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

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

后两点可以解决你的问题。
有关详细信息,请参见gitignore(5)

eeq64g8w

eeq64g8w4#

我曾经遇到过类似的情况,所以我添加了我的首选解决方案,但我没有看到提到。git update-index --assume-unchanged在这种情况下的问题是,您无法对未跟踪的文件执行此操作。
我不能修改我的存储库的.gitignore。
我假设你的意思是你不能将对.gitignore的任何更改推送到源文件。如果是这种情况,你可以做的是将未跟踪的文件添加到本地.gitignore,然后执行git update-index --assume-unchanged .gitignore,这样你对.gitignore的更改就不会被推送。现在你忽略了(可能)未跟踪的文件,并且不会影响远程.gitignore文件。

i5desfxk

i5desfxk5#

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

i2byvkas6#

另一种方式:

  • 编辑本地.gitignore
  • 那么git update-index --assume-unchanged .gitignore
gz5pxeao

gz5pxeao7#

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

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

qvk1mo1f8#

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

v1l68za4

v1l68za49#

使用vim或emacs修改.git/info/exclude对我来说很好。
注意@Desko27注解,但是,如果你想忽略已经被Git跟踪的文件,这种方法就不起作用了。
因此,在跟踪文件之前尽早忽略它。

相关问题