我在变更集中有一堆文件,但我想特别忽略一个修改过的文件.看起来像这样git status:
# modified: main/dontcheckmein.txt
# deleted: main/plzcheckmein.c
# deleted: main/plzcheckmein2.c
...
Run Code Online (Sandbox Code Playgroud)
有没有办法可以做git add但只是忽略我不想触摸的一个文本文件?就像是:
git add -u -except main/dontcheckmein.txt
Run Code Online (Sandbox Code Playgroud)
Ben*_*son 770
git add -u
git reset -- main/dontcheckmein.txt
Run Code Online (Sandbox Code Playgroud)
Aqu*_*wer 123
1)开始忽略对单个已经版本化的文件的更改
git update-index --assume-unchanged "main/dontcheckmein.txt"
Run Code Online (Sandbox Code Playgroud)
并撤消 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,其中.gitignore在为MyProject; 该设置将覆盖~/.gitignore_global,可以有非常有用的规则 ......
所以,就目前而言,我认为最好是做一些脚本来混音.gitignore与~/.gitignore_global在.gitignore.
最后一个警告
如果您要忽略的文件已经在存储库中,除非您执行此操作git rm "MyFolder/myfile.txt",否则此方法将不起作用:,但请先备份它,因为它也将在本地删除!你可以稍后复制一下......
Rit*_*tan 75
对于文件
git add -u
git reset -- main/dontcheckmein.txt
Run Code Online (Sandbox Code Playgroud)
对于文件夹
git add -u
git reset -- main/*
Run Code Online (Sandbox Code Playgroud)
cat*_*yes 47
现在git支持exclude certain paths and filespathspec magic :(exclude)及其简短形式:!.因此,您可以轻松地按以下命令实现它.
git add --all -- :!main/dontcheckmein.txt
git add -- . :!main/dontcheckmein.txt
Run Code Online (Sandbox Code Playgroud)
实际上你可以指定更多:
git add --all -- :!path/to/file1 :!path/to/file2 :!path/to/folder1/*
git add -- . :!path/to/file1 :!path/to/file2 :!path/to/folder1/*
Run Code Online (Sandbox Code Playgroud)
Nik*_*iko 31
Git:(exclude)为要排除的路径提供了 pathspecs 前缀。
它的简短魔法签名是:^。
\n文档: https://git-scm.com/docs/gitglossary#Documentation/gitglossary.txt-exclude
git add . :^main/dontcheckmein.txt\nRun Code Online (Sandbox Code Playgroud)\n该线程的一些答案提到:!,这也可以工作,但只能使用引号。一般来说,!对于 shell 扩展来说,被认为是一个可怕的角色。
如果你像我一样 \xe2\x80\x94 总是使用命令 \xe2\x80\x94-p中的标志检查将要提交的内容git add:^ xe2\x80\x94魔法签名也像一个魅力一样:
git add -p . :^main/dontcheckmein.txt\nRun Code Online (Sandbox Code Playgroud)\n
Ant*_*deo 19
虽然本杰克逊是正确的,但我想我会添加我一直在使用该解决方案的方式.下面是我使用的一个非常简单的脚本(我称之为gitadd)来添加所有更改,除了我保留在一个名为的文件中列出的少数几个.gittrackignore(非常类似于.gitignore如何工作).
#!/bin/bash
set -e
git add -A
git reset `cat .gittrackignore`
Run Code Online (Sandbox Code Playgroud)
这就是我目前的.gittrackignore样子.
project.properties
Run Code Online (Sandbox Code Playgroud)
我正在开发一个Android项目,我在部署时从命令行编译.这个项目依赖于SherlockActionBar,因此需要在project.properties中引用,但是这与编译有关,所以现在我只需键入gitadd并添加所有更改到git,而不必每次都取消添加project.properties.
我们可以添加所有文件并排除必须通过 git Reset 删除的文件。
git add .
git reset -- <file_name_to_exclude>
Run Code Online (Sandbox Code Playgroud)
用于git add -A一次性添加所有已修改和新添加的文件。
例子
git add -A
git reset -- main/dontcheckmein.txt
Run Code Online (Sandbox Code Playgroud)
为了保留文件中的更改但不提交,我这样做了
git add .
git reset -- main/dontcheckmein.txt
git commit -m "commit message"
验证文件是否被排除
git status
| 归档时间: |
|
| 查看次数: |
267075 次 |
| 最近记录: |