Bjo*_*orn 1237 git ignore gitignore
我可以在本地忽略文件而不会污染其他人的全局git配置吗?我在我的git状态下没有跟踪文件是垃圾邮件,但我不想为我在本地分支机构中的每个小随机未跟踪文件提交git配置更改.
Jos*_*Lee 1689
从相关的Git文档:
特定于特定存储库但不需要与其他相关存储库共享的模式(例如,存储在存储库内但特定于一个用户工作流的辅助文件)应该进入该
$GIT_DIR/info/exclude文件.
该.git/info/exclude文件具有与任何.gitignore文件相同的格式.另一种选择是设置core.excludesFile包含全局模式的文件的名称.
请注意,如果您已经有非分段更改,则必须在编辑ignore-patterns后运行以下命令:
git update-index --assume-unchanged [<file>...]
Run Code Online (Sandbox Code Playgroud)
注意事项$GIT_DIR:这是使用的符号遍布 git的手册只是为了表明路径git仓库.如果设置了环境变量,那么它将覆盖您所在的任何回购的位置,这可能不是您想要的.
Flo*_*ser 422
更新:请考虑使用git update-index --skip-worktree [<file>...],谢谢@danShumway!请参阅Borealid对这两个选项的区别的解释.
老答案:
如果您需要忽略对跟踪文件的本地更改(我们对配置文件进行了本地修改),请使用git update-index --assume-unchanged [<file>...].
pha*_*ann 151
将以下行添加到.gitconfig文件的[alias]部分
ignore = update-index --assume-unchanged
unignore = update-index --no-assume-unchanged
ignored = !git ls-files -v | grep "^[[:lower:]]"
Run Code Online (Sandbox Code Playgroud)
现在,您可以使用git ignore my_file忽略对本地文件git unignore my_file的更改,并停止忽略更改.git ignored列出被忽略的文件.
这个答案来自http://gitready.com/intermediate/2009/02/18/temporarily-ignoring-files.html.
Emi*_*Sit 107
你有几个选择:
.gitignore在工作目录中保留一个脏的(或未提交的)文件(或使用topgit或其他一些此类补丁工具自动应用它).$GIT_DIR/info/exclude文件中,如果这是特定于一棵树.git config --global core.excludesfile ~/.gitignore并添加模式到您的~/.gitignore.如果要忽略所有树中的某些模式,则此选项适用.例如,我用它.pyc和.pyo文件.此外,如果适用,请确保使用模式而不是显式枚举文件.
Pio*_*aga 53
我想你正在寻找:
git update-index --skip-worktree FILENAME
Run Code Online (Sandbox Code Playgroud)
忽略局部变化
这里有http://devblog.avdi.org/2011/05/20/keep-local-modifications-in-git-tracked-files/关于这些解决方案的更多解释!
Bir*_*abs 46
您可以安装一些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"'
Run Code Online (Sandbox Code Playgroud)
这个安装的快捷方式如下:
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.
JES*_*Sii 33
您只需将.gitignore文件添加到主目录即ie $HOME/.gitignore或~/.gitignore.然后告诉git使用该命令:
git config --global core.excludesfile ~/.gitignore
Run Code Online (Sandbox Code Playgroud)
这是一个正常的.gitignore文件,git在决定忽略什么时引用它.由于它位于您的主目录中,因此它仅适用于您,并且不会污染任何项目.gitignore文件.
多年来我一直在使用这种方法,效果很好.
Yus*_*sef 10
这是一种简单的解决方案,即在本地排除文件中添加一行。
echo YOURFILE_OR_DIRECTOY >> .git/info/exclude
Run Code Online (Sandbox Code Playgroud)
--assume-unchanged 和 --skip-worktree 都不是在本地忽略文件的正确方法......请检查这个答案和git update-index文档中的注释。文件以任何理由保持经常变化(和/或从克隆到另一个变化)及其变化不应该被提交,然后把这些文件不应该被摆在首位跟踪。
但是,有两种在本地忽略文件的正确方法(都适用于未跟踪的文件)。要么将文件名放在 .git/info/exclude 文件中,该文件是 .gitignore 的本地替代文件,但特定于当前克隆。或者使用全局 .gitignore (它应该仅用于常见的辅助文件,例如 pyz、pycache 等),并且该文件将在您机器中的任何 git repo 中被忽略。
要使上述内容自动化(添加到排除或全局 .gitignore),您可以使用以下命令(添加到您的 bash-profile):
.git/info/exclude~/.gitignoreLinux
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
}
Run Code Online (Sandbox Code Playgroud)
MacOS(您需要 .bak 进行sed就地修改(即您被迫将文件扩展名添加到就地 sed。即在替换某些内容之前进行备份),因此要删除 .bak 文件,我添加了 rm filename.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
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
git-ignore example_file.txt
git-unignore example_file.txt
为了忽略未跟踪的文件,特别是如果它们位于(一些)未跟踪的文件夹中,一个简单的解决方案是将文件添加.gitignore到每个未跟踪的文件夹中,并输入包含*后跟新行的单行。如果未跟踪的文件位于几个文件夹中,那么这是一个非常简单直接的解决方案。对我来说,所有文件都来自一个未跟踪的文件夹vendor,上面的内容就起作用了。
| 归档时间: |
|
| 查看次数: |
347994 次 |
| 最近记录: |