所有文件添加到除提交一个文件?所有文件添加到除提交一个文件?(Add all files to a

2019-05-12 13:36发布

我有一大堆的变更文件,但我想明确忽略一个修改过的文件。 看起来这之后git status

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

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

git add -u -except main/dontcheckmein.txt

Answer 1:

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


Answer 2:

1)要开始忽略变为单已经版本文件

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

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

点击这里

2)以完全从在存储库创建忽略某一特定的单一文件防止它

在此首先看的Git全局忽略不工作

.gitignore的相对路径添加到该文件,而不会导致./

所以如果你的文件是在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其中.gitignoreMyProject ; 该设置将覆盖~/.gitignore_global ,可以有非常有用的规则 ...

所以,就目前而言,我认为最好是做一些脚本来搭配你.gitignore~/.gitignore_global.gitignore

最后一个警告
如果你想忽略该文件已经在库,除非你做到这一点这种方法是行不通的: git rm "MyFolder/myfile.txt" ,但第一次备份,因为它会在本地也删除! 您可以在以后将它复制回...



Answer 3:

对于文件

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

对于一个文件夹

git add -u
git reset -- main/*


Answer 4:

现在git支持exclude certain paths and files通过pathspec魔法:(exclude)和它的缩写形式:! 。 所以,你可以很容易地实现为下面的命令。

git add --all -- :!main/dontcheckmein.txt
git add -- . :!main/dontcheckmein.txt

其实你可以指定更多:

git add --all -- :!path/to/file1 :!path/to/file2 :!path/to/folder1/*
git add -- . :!path/to/file1 :!path/to/file2 :!path/to/folder1/*


Answer 5:

虽然本·杰克逊是正确的,我以为我想补充我怎么一直在使用该解决方案,以及。 下面是一个非常简单的脚本我使用(我称之为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每一次。



Answer 6:

试试这个:

git的结帐 - 主/ dontcheckmein.txt



Answer 7:

使用git add -A添加所有修改和新增的文件一次。

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


Answer 8:

我用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一个更普遍的使用情况。



Answer 9:

对于这个问题的特定情况下,最简单的方法是添加的所有文件扩展名为.c,并留下了一切:

git add *.c

从GIT-SCM (或/和man git add ):

git的添加<pathspec> ...

要添加的文件与内容。 Fileglobs(如* .c)中可以给出添加所有匹配的文件。 <...>

请注意,这意味着,你也可以这样做:

git add **/main/*

补充一点,是在所有文件(没有忽略) main文件夹。 你甚至可以去野外用更精细的图案:

git add **/s?c/*Service*

以上将添加的所有文件中的s(any char)c文件夹,并有Service在其文件名的地方。

很显然,你不局限于每个命令一个模式。 也就是说,你可以问git的补充,具有.C.h的扩展名的文件:

git add *.c *.h

此链接可能会给你一些更多的水珠图案的想法。

我觉得特别有用,当我做了很多变化,但仍希望我提交留原子和反映渐进的过程,而不是我可以在当时的工作变动的大杂烩。 当然,在某些时候想出复杂的图案胜过添加文件用更简单的方法,或在同一时间,甚至一个文件的费用成本。 然而,大部分的时间,我很容易就能找出只是我需要一个简单的模式中的文件,并排除一切。

顺便说一句,你可能需要引用您glob模式,为他们的工作,但是这从来不是我的情况。



Answer 10:

要提交的变化:(使用“git的重置头......”到unstage)



文章来源: Add all files to a commit except a single file?
标签: git git-add