什么是git命令中的<pathspec>?</pathspec>

时间:2014-12-30 20:14:53

标签: git github

我已在应用程序中更新,修改和删除了文件,现在我已准备好提交。这是状态:

C:\G\ab\WebAdminApp>git status
On branch master
Your branch is up-to-date with 'origin/master'.

Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   WebAdminApp.csproj
        modified:   WebAdminApp.csproj.user
        modified:   app/admin/controllers/ContentController.ts
        deleted:    app/admin/interfaces/IEnumService.ts
        modified:   app/admin/interfaces/IHomeController.d.ts
        modified:   lib/pagedown/Markdown.Sanitizer.ts
        deleted:    lib/typings/global.ts
        modified:   package.json
        modified:   ../abilitest-admin.v12.suo

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        app/interfaces/IEnumService.d.ts
        app/interfaces/IUtilityService.d.ts
        ../npm-debug.log

没有更改添加到提交(使用&#34; git add&#34;和/或&#34; git commit -a&#34;)

当我进入时:

git add . 

它给我一条消息说:

C:\G\ab\WebAdminApp>git add .
warning: You ran 'git add' with neither '-A (--all)' or '--ignore-removal',
whose behaviour will change in Git 2.0 with respect to paths you removed.
Paths like 'WebAdminApp/app/admin/interfaces/IEnumService.ts' that are
removed from your working tree are ignored with this version of Git.

* 'git add --ignore-removal <pathspec>', which is the current default,
  ignores paths you removed from your working tree.

* 'git add --all <pathspec>' will let you also record the removals.

我希望我在本地PC上所做的一切都得到提交,然后我希望GITHUB上的主人能够反映这一点。

有人可以解释它的意思 ,我现在应该输入什么,以便可以使用git提交提交所有更改?对不起,我不清楚。是目录还是?

3 个答案:

答案 0 :(得分:6)

此答案完全源自Git Pathspecs and How to Use Them。我还没有复制完所有内容,因此请查看链接以进行更深入的研究


pathspec是git用于将git命令的范围限制为存储库子集的机制。如果您使用了很多git,则无论您是否知道,都可能使用了pathspec。例如,在命令git add README.md中,pathspecREADME.md。但是,它具有更多细微差别和灵活性。

那么,为什么要学习pathspec?由于它是许多命令的一部分,因此对pathspec的理解使这些命令变得更加强大。使用git add,您可以仅在单个目录中添加文件。使用git diff,您可以检查扩展名为.scss的文件名更改。您可以git grep除/dist目录中的文件以外的所有文件。

文件或目录

git add .      # add CWD (current working directory)
git add ..     # add parent directory and its subdirectories
git add src/   # add src/ directory
git add README # add only README directory

如果您曾经做过ls -a,它将列出所有文件和“目录条目”,其中将包括...,有关更多信息,请参见here < / sub>

通配符

git log '*.js' # logs all .js files in CWD and subdirectories
git log '.*'   # logs all 'hidden' files and directories in CWD
git log '*/.*' # logs all 'hidden' files and directories in subdirectories

顶部

top签名告诉git匹配git存储库根目录中的模式,而不是当前工作目录。您也可以使用简写:/而不是:(top)

git ls-files ':(top)*.js'
git ls-files ':/*.js' # shorthand

情况

icase签名告诉git在匹配例如这对于匹配jpg文件(有时使用大写扩展名JPG)很有用。

git ls-files ':(icase)*.jpg'

排除

最后,有一个“排除”魔术签名(:!:^的简写)。例如您可以搜索所有.js文件,而排除.spec.js测试文件。

git grep 'foo' -- '*.js' ':(exclude)*.spec.js' # search .js files excluding .spec.js
git grep 'foo' -- '*.js' ':!*.spec.js' .       # shorthand for the same

答案 1 :(得分:1)

如果您希望删除已删除的文件,请执行git add --all .。如果您不希望在存储库中删除它们,请执行git add --ignore-removal .

答案 2 :(得分:1)

来自Git Glossary

  

[A路径规范是一种模式],用于限制Git命令中的路径。

     

在“git ls-files”,“git ls-tree”,“git add”,“git grep”,“git diff”,“git checkout”以及许多其他命令的命令行中使用Pathspecs将操作范围限制为树或工作树的某个子集。

作为示例,命令git add :/**.ts将递归地向索引添加从存储库的根开始以.ts结尾的所有文件(尊重忽略文件的各种方式)。 / p>