Answers:
特定于特定存储库但无需与其他相关存储库共享的模式(例如,位于存储库内但特定于一个用户工作流程的辅助文件)应放入该
$GIT_DIR/info/exclude
文件中。
该.git/info/exclude
文件具有与任何.gitignore
文件相同的格式。另一个选项是将设置core.excludesFile
为包含全局模式的文件的名称。
请注意,如果您已经撤消了更改,则必须在编辑忽略模式之后运行以下命令:
git update-index --assume-unchanged <file-list>
注意事项$GIT_DIR
:这是一个符号使用遍布 git的手册只是为了表明路径git仓库。如果设置了环境变量,那么它将覆盖您所在的任何存储库的位置,而这可能不是您想要的。
编辑:另一种方法是使用:
git update-index --skip-worktree <file-list>
通过以下方式将其反转:
git update-index --no-skip-worktree <file-list>
skip-worktree
可能会更受欢迎assume-unchanged
。
更新:考虑使用git update-index --skip-worktree [<file>...]
代替,谢谢@danShumway!请参阅Borealid关于这两种选择的区别的说明。
旧答案:
如果您需要忽略对跟踪文件的本地更改(我们对本地配置文件进行了修改),请使用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别名来简化此过程。这将编辑文件的[alias]
节点.gitconfig
。
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
config.xml
-防止您意外提交这些更改。git unignore config.xml
config.xml
-允许您再次提交这些更改。git ignored
我通过参考phatmann的答案来构建这些内容-提出了一个--assume-unchanged
了相同版本。
我提供的版本--skip-worktree
用于忽略本地更改。有关差异的完整说明,请参见Borealid的答案,但是本质上--skip-worktree
,其目的是让开发人员更改文件而没有提交更改的风险。
git ignored
此处显示的命令使用git ls-files -v
,并过滤列表以仅显示以S
标记开头的条目。该S
标记表示其状态为“跳过worktree”的文件。有关显示的文件状态的完整列表git ls-files
:请参阅文档中有关该-t
选项的信息git ls-files
。
'!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>
即可临时开始再次跟踪它!谢谢!
您只需将.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历史中仍然存在。
如果您的存储库还没有.gitignore文件,那么一个简单的解决方案是创建一个.gitignore文件,并将其添加.gitignore
到要忽略的文件列表中。
.gitignore
顶部有一个共享文件。但是我的脏文件在一个深文件夹中,因此我在文件.gitignore
旁边添加了自己的文件。+1
git update-index --assume-unchanged [<file>...]
在添加到排除文件之后。直到那时,更改才会生效。