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

pup*_*eno 122 git version-control

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

Von*_*onC 164

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

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

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

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

(另见这个问题)


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

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

两者之间的区别在" Git - assume-unchanged'和' skip-worktree' 之间的区别"中解释.

  • @ElijahLynn 当然。您还有“update-index --skip-work-tree”。我编辑了答案,添加了一些指向我的旧答案的链接,说明了这两个“update-index”命令。 (2认同)

Óla*_*age 128

如果你可以修改,.git/info/exclude你可以在那里使用相同的规则.但该文件仅在您的本地仓库中.

  • @yourfriendzak子模块的`.git`文件夹实际上是`parent_repo/.git/modules/submodule_name`.所以你要编辑`parent_repo/.git/modules/submodule_name/info/exclude` (7认同)
  • 但是,如果您想忽略已经被 Git 跟踪的文件,这种方法就不起作用了 [(源文章)](https://luisdalmolin.dev/blog/ignoring-files-in-git-without-gitignore /)。 (4认同)
  • 这如何与子模块一起使用?子模块中没有“.git”目录... (2认同)

Fer*_*yer 23

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

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

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

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


Ton*_*ony 8

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

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

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


Dav*_*cki 7

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

*

IE

$ cat > tracked_dir1/tracked_dir2/untracked_dir/.gitignore
*
<Ctrl+D>
Run Code Online (Sandbox Code Playgroud)


Eli*_*ynn 6

忽略对跟踪文件的本地更改: 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.
Run Code Online (Sandbox Code Playgroud)


lan*_*vel 5

其它的办法:

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


归档时间:

查看次数:

46324 次

最近记录:

5 年,10 月 前