从 the relevant Git documentation:
特定于特定存储库但不需要与其他相关存储库共享的模式(例如,存在于存储库中但特定于一个用户工作流的辅助文件)应该进入 $GIT_DIR/info/exclude 文件。
.git/info/exclude
文件与任何 .gitignore
文件具有相同的格式。另一种选择是将 core.excludesFile
设置为包含全局模式的文件的名称。
请注意,如果您已经有未暂存的更改,则必须在编辑忽略模式后运行以下命令:
git update-index --assume-unchanged <file-list>
关于 $GIT_DIR
的注意事项:这是一个在 git 手册中使用的符号 all over,仅用于指示 git 存储库的路径。如果设置了环境变量,那么它将覆盖您所在的任何 repo 的位置,这可能不是您想要的。
编辑:另一种方法是使用:
git update-index --skip-worktree <file-list>
通过以下方式反转它:
git update-index --no-skip-worktree <file-list>
更新:考虑改用 git update-index --skip-worktree [<file>...]
,谢谢@danShumway!请参阅Borealid's explanation on the difference of the two options。
老答案:
如果您需要忽略对跟踪文件的本地更改(我们对配置文件进行了本地修改),请使用 git update-index --assume-unchanged [<file>...]
。
git update-index --assume-unchanged my-file.php
才能开始忽略它。谢谢你的提示!
git update-index --no-assume-unchanged my-file.php
.git/info/exclude
是您想要的(以避免污染经常共享和跟踪的 .gitignore)
--assume-unchanged
。我用 --no-assume-unchanged
撤消了,然后 用 --skip-worktree
...
将以下行添加到 .gitconfig 文件的 [alias] 部分
ignore = update-index --assume-unchanged
unignore = update-index --no-assume-unchanged
ignored = !git ls-files -v | grep "^[[:lower:]]"
现在您可以使用 git ignore my_file
忽略对本地文件的更改,并使用 git unignore my_file
停止忽略更改。 git ignored
列出被忽略的文件。
这个答案是从 http://gitready.com/intermediate/2009/02/18/temporarily-ignoring-files.html 中收集到的。
你有几个选择:
在您的工作目录中留下一个脏(或未提交)的 .gitignore 文件(或使用 topgit 或其他类似的补丁工具自动应用它)。
将排除项放在您的 $GIT_DIR/info/exclude 文件中,如果这是特定于一棵树的话。
运行 git config --global core.excludesfile ~/.gitignore 并将模式添加到您的 ~/.gitignore。如果您想忽略所有树中的某些模式,则此选项适用。例如,我将它用于 .pyc 和 .pyo 文件。
此外,请确保您使用的是模式而不是明确枚举文件(如果适用)。
git config --global
全局设置选项。
我认为您正在寻找:
git update-index --skip-worktree FILENAME
忽略本地所做的更改
以下是有关这些解决方案的http://devblog.avdi.org/2011/05/20/keep-local-modifications-in-git-tracked-files/更多说明!
撤消使用:
git update-index --no-skip-worktree FILENAME
--skipworktree
忽略的文件/模式列表,我是否应该稍后改变主意并想再次开始跟踪文件?
git update-index --no-skip-worktree <file>
git ls-files -v | grep ^S
您可以简单地将 .gitignore 文件添加到您的主目录,即 $HOME/.gitignore
或 ~/.gitignore
。然后通过以下命令告诉 git 使用该文件:
git config --global core.excludesfile ~/.gitignore
这是一个普通的 .gitignore 文件,git 在决定忽略什么时会引用它。由于它位于您的主目录中,因此它仅适用于您并且不会污染任何项目 .gitignore 文件。
多年来,我一直在使用这种方法并取得了很好的效果。
git check-ignore <file-name>
进行验证。 LMK 如果它适合你
=
的情况下它才对我有用:git config --global core.excludesfile ~/.gitignore
.gitignore
文件并告诉 git 使用该文件,然后删除了我想在本地取消跟踪的文件。但是,在我推送更改后,远程存储库也删除了这些文件。我做错什么了吗?
.gitignore
是关于忽略本地目录中存在的文件。您应该做的是 git rm --cached
将它们从存储库中删除,但将它们留在您的本地。您应该能够使用 git reset --soft HEAD^
之类的内容返回之前的提交以撤消该提交并恢复您的文件。这就是 git 的美妙之处:它仍然存在于你的 git 历史中。
您可以安装一些 git aliases 以简化此过程。这将编辑您的 .gitconfig
文件的 [alias]
节点。
git config --global alias.ignore 'update-index --skip-worktree'
git config --global alias.unignore 'update-index --no-skip-worktree'
git config --global alias.ignored '!git ls-files -v | grep "^S"'
为您安装的快捷方式如下:
git ignore config.xml git 会假装它在 config.xml 上没有看到任何更改——防止您意外提交这些更改。
git 会假装它在 config.xml 上没有看到任何更改——防止您意外提交这些更改。
git unignore config.xml git 将继续确认您对 config.xml 的更改——允许您再次提交这些更改。
git 将继续确认您对 config.xml 的更改——允许您再次提交这些更改。
git ignore git 会以上述方式列出您“忽略”的所有文件。
git 将以上述方式列出您“忽略”的所有文件。
我通过参考 phatmann's answer 构建了这些 - 它提供了相同的 --assume-unchanged
版本。
我提供的版本使用 --skip-worktree
来忽略本地更改。有关差异的完整说明,请参阅 Borealid's answer,但本质上,--skip-worktree
的目的是让开发人员更改文件而不会有提交更改的风险。
此处显示的 git ignored
命令使用 git ls-files -v
,并过滤列表以仅显示以 S
标记开头的条目。 S
标记表示状态为“跳过工作树”的文件。有关 git ls-files
显示的文件状态的完整列表:请参阅 git ls-files
上的 -t
选项的文档。
'!git ls-files -v | grep "^S"'
中?该命令在那里对我不起作用..并且在删除它后似乎可以正常工作。
Expansion of alias 'ignored' failed; 'git' is not a git command
。这是有道理的;不带感叹号:git 将您的命令别名为 git git ls-files …
。
git ignore <filename>
时,它仅适用于该目录。当您最终想要对该文件进行更改并提交并推送到远程时,只需使用方便的 git unignore <filename>
来临时重新开始跟踪它!谢谢!
这是排除本地文件的简短单行解决方案。
echo YOUR_FILE_OR_DIRECTORY >> .git/info/exclude
--assume-unchanged 和 --skip-worktree 都不是正确的方式来忽略本地文件...请检查 this answer 和 the documentation 中的注释git 更新索引。出于任何原因频繁更改(和/或从克隆更改为另一个)并且不应提交其更改的文件,那么这些文件不应该首先被跟踪。
但是,有两种在本地忽略文件的正确方法(都适用于未跟踪的文件)。要么将文件名放在 .git/info/exclude 文件中,这是 .gitignore 的本地替代方案,但特定于当前克隆。或者使用全局 .gitignore(它应该仅用于常见的辅助文件,例如 pyz、pycache 等),并且该文件将在您机器中的任何 git repo 中被忽略。
要使上述内容自动化(添加到排除或全局 .gitignore),您可以使用以下命令(添加到您的 bash 配置文件):
每个克隆本地排除(请注意,由于使用相对路径,调用命令时您应该在存储库的根目录中),将 ##FILE-NAME## 更改为 .git/info/exclude
全局 .gitignore,首先在此处生成全局 .gitignore 然后将 ##FILE-NAME## 更改为 ~/.gitignore
Linux
alias git-ignore='echo $1 >> ##FILE-NAME##'
alias git-show-ignored='cat ##FILE-NAME##'
git-unignore(){
GITFILETOUNIGNORE=${1//\//\\\/}
sed -i "/$GITFILETOUNIGNORE/d" ##FILE-NAME##
unset GITFILETOUNIGNORE
}
MacOS(您需要 .bak 来进行 sed
就地修改(即您被迫添加文件扩展名来就地 sed。即在替换某些内容之前进行备份),因此要删除 .bak 文件我添加了 rm 文件名.bak)
alias git-ignore='echo $1 >> ##FILE-NAME##'
alias git-show-ignored='cat ##FILE-NAME##'
git-unignore(){
GITFILETOUNIGNORE=${1//\//\\\/}
sed -i.bak "/$GITFILETOUNIGNORE/d" ##FILE-NAME##
rm ##FILE-NAME##.bak
unset GITFILETOUNIGNORE
}
然后你可以这样做:
git-ignore example_file.txt
git-unignore example_file.txt
为了忽略未跟踪的文件,特别是如果它们位于(几个)未跟踪的文件夹中,一个简单的解决方案是在每个未跟踪的文件夹中添加一个 .gitignore
文件,并在包含 *
的单行中输入后跟新队。如果未跟踪的文件位于几个文件夹中,这是一个非常简单直接的解决方案。对我来说,所有文件都来自一个未跟踪的文件夹 vendor
,上面的方法就可以了。
只需将路径添加到 ypu 想要从当前 repo 的任何分支上的提交中删除的文件:
在 Windows 目录设置中取消隐藏隐藏文件 打开路径 REPO_MAIN_PATH/.git/info/exclude 例如添加 **/toExcludeFile.bat
就是这样!对我来说,上面的回答太长了。 KISS - 保持简单
对于想要在子模块中本地忽略文件的任何人:
使用与 .gitignore
文件相同的格式编辑 my-parent-repo/.git/modules/my-submodule/info/exclude
。
如果您的 repo 还没有 .gitignore 文件,那么一个简单的解决方案是创建一个 .gitignore 文件,并在其中将 .gitignore
添加到要忽略的文件列表中。
.gitignore
文件。但是我的脏文件位于一个很深的文件夹中,所以我只是在它们旁边添加了自己的 .gitignore
。 +1
不定期副业成功案例分享
git update-index --assume-unchanged [<file>...]
。直到那时,这些更改才会被采纳。skip-worktree
可能比assume-unchanged
更受欢迎。