我在一个变更集中有一堆文件,但我想特别忽略一个修改过的文件。在git状态后看起来如下:
# modified: main/dontcheckmein.txt
# deleted: main/plzcheckmein.c
# deleted: main/plzcheckmein2.c
...
有没有一种方法可以让我添加git,但忽略我不想触摸的一个文本文件?类似于:
git add -u -except main/dontcheckmein.txt
我在一个变更集中有一堆文件,但我想特别忽略一个修改过的文件。在git状态后看起来如下:
# modified: main/dontcheckmein.txt
# deleted: main/plzcheckmein.c
# deleted: main/plzcheckmein2.c
...
有没有一种方法可以让我添加git,但忽略我不想触摸的一个文本文件?类似于:
git add -u -except main/dontcheckmein.txt
当前回答
我经常使用git add-patch,并希望这样做,以避免在同一个文件中始终命中d。为了完成这项工作,我使用了几个非常古怪的git别名:
[alias]
HELPER-CHANGED-FILTERED = "!f() { git status --porcelain | cut -c4- | ( [[ \"$1\" ]] && egrep -v \"$1\" || cat ); }; f"
ap = "!git add --patch -- $(git HELPER-CHANGED-FILTERED 'min.(js|css)$' || echo 'THIS_FILE_PROBABLY_DOESNT_EXIST' )"
在我的例子中,我只是想一直忽略某些缩小的文件,但对于更一般的用例,可以使用类似$GIT_EXCLUDE_PATTERN的环境变量。
其他回答
git add -u
git reset -- main/dontcheckmein.txt
注意:Git随后为此添加了特殊语法,其他答案对此进行了解释。
添加所有文件
git添加。
获取要粘贴到下面的文件路径
git状态
从提交中删除
git reset--file/to/path/file-to-ignore.txt
虽然本·杰克逊是正确的,但我想我也会补充一下我是如何使用这个解决方案的。下面是我使用的一个非常简单的脚本(我称之为gitadd)来添加所有更改,除了我在一个名为.gittrackignore的文件中列出的少数更改(非常类似于.gitignore的工作方式)。
#!/bin/bash
set -e
git add -A
git reset `cat .gittrackignore`
这就是我当前的.gittrackignore的样子。
project.properties
我正在开发一个Android项目,在部署时我从命令行编译。这个项目依赖于SherlockActionBar,因此需要在project.properties中引用它,但这会影响编译,所以现在我只需键入gitadd并将所有更改添加到git中,而不必每次都取消添加project.properties。
1) 开始忽略对单个已版本化文件的更改
git update-index --assume-unchanged "main/dontcheckmein.txt"
要撤消git更新索引,请假定“main/dontcheckmein.txt”不变
github文档忽略文件
2) 完全忽略特定的单个文件,以防止在存储库中创建该文件
首先,看看这篇stackoverflow文章:Git全局忽略不起作用
在.gitignore中,将相对路径添加到文件中,不以./开头。
因此,如果您的文件位于MyProject/MyFolder/myfile.txt(其中.git也位于MyProject文件夹中),请将MyFolder/myfile.txt添加到.git忽略文件中。
您可以通过git check ignore“MyFolder/myfile.txt”确认哪些规则与忽略相关
关于全局忽略
该链接涉及~/.gitignore_global,但该文件与您的项目相关。因此,如果将排除模式MyFolder/myfile.txt放在~/.gitignore_global中,它会起作用,但不会有太大意义。。。
另一方面,如果您使用git-config-core.excludsfile.gitignore来设置项目,其中.gitignore在MyProject中,则本地文件将覆盖~/.gitignore_global,它可能具有非常有用的规则。。。
因此,目前,我认为最好制作一些脚本,将.gitignore与~/.gitignore_global混合在.gitignor中。
最后一个警告如果要忽略的文件已经在存储库中,则除非执行以下操作,否则此方法将无法工作:git rm“MyFolder/myfile.txt”,但请先备份它,因为它也将在本地删除!你可以稍后复制回来。。。
对于文件
git add -u
git reset -- main/dontcheckmein.txt
对于文件夹
git add -u
git reset -- main/*