将所有文件添加到除单个文件之外的提交?

我在变更集中有一堆文件,但我想特别忽略一个修改后的文件。 在git status之后看起来像这样:

 # modified: main/dontcheckmein.txt # deleted: main/plzcheckmein.c # deleted: main/plzcheckmein2.c ... 

有没有办法我可以做git add但只是忽略一个文本文件,我不想碰? 就像是:

 git add -u -except main/dontcheckmein.txt 
 git add -u git reset -- main/dontcheckmein.txt 

1)开始忽略对单个已经版本化的文件的更改

 git update-index --assume-unchanged "main/dontcheckmein.txt" 

并撤消该git update-index --no-assume-unchanged "main/dontcheckmein.txt"

在这里检查

2)完全忽略特定的单个文件,以防止它在存储库中被创build

首先看看这个Git全局忽略不工作

并在.gitignore添加文件的相对path,而不带领./

所以如果你的文件在MyProject/MyFolder/myfile.txt (其中.git也在MyProject ),在.gitignore你只需要把这个MyFolder/myfile.txt

你可以用git check-ignore "MyFolder/myfile.txt"来确认哪些规则与忽略有关

关于全球忽视

那个链接说的是~/.gitignore_global ; 但该文件与您的项目有关; 所以,如果你把排除模式MyFolder/myfile.txt放在~/.gitignore_global ,它会起作用,但不会有多大意义。

另一方面,如果你用git config core.excludesfile .gitignore设置项目, git config core.excludesfile .gitignore位于MyProject ; 该设置将覆盖~/.gitignore_global可以有非常有用的规则 …

所以,现在,我认为最好的方法是制作一些脚本,将.gitignore.gitignore中的~/.gitignore_global混合使用。

最后一个警告
如果你想忽略的文件已经存在于版本库中,除非你这么做,否则这个方法是行不通的: git rm "MyFolder/myfile.txt" ,但是先备份,因为它也会在本地被删除! 你可以稍后复制它…

对于一个文件

 git add -u git reset -- main/dontcheckmein.txt 

对于一个文件夹

 git add -u git reset -- main/* 

虽然本jackson是正确的,我想我会添加我一直在使用该解决scheme。 下面是我使用的一个非常简单的脚本(我称之为gitadd)来添加除了我保存在名为.gittrackignore (非常类似于.gitignore工作方式)的文件中的less数select之外的所有更改。

 #!/bin/bash set -e git add -A git reset `cat .gittrackignore` 

这就是我现在的.gittrackignore样子。

 project.properties 

我正在开发部署时从命令行编译的Android项目。 这个项目依赖于SherlockActionBar,因此它需要在project.properties中引用,但是编译混乱,所以现在我只需键入gitadd并将所有更改添加到git,而不必每次都不添加project.properties 。

尝试这个:

git checkout – main / dontcheckmein.txt

你在Git的页面上有个很好的例子(第一个例子): http : //git-scm.com/docs/git-reset

我使用git add --patch相当多,想要这样的东西,以避免不得不通过相同的文件打d 。 我掀起了一个非常hacky几个混帐别名完成工作:

 [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这样的环境variables作为更一般的用例。