kos*_*tja 52 git wildcard git-checkout
我想要做的是签出一个文件或一组具有这样的通用名称部分的文件
git checkout myBranch */myFile.md 和
git checkout myBranch -- */*Test* (不确定' - '部分)
代替
git checkout myBranch src/main/java/a/deep/package/structure/myFile.md 和
git checkout myBranch src/test/java/a/deep/package/structure/TestOne.java
git checkout myBranch src/test/java/a/deep/package/structure/TestTwo.java
git checkout myBranch src/test/java/a/deep/package/structure/resources/TestData.sql
我知道某些git命令有一些有限的通配符功能diff,add但是没有找到任何内容checkout.有办法吗?
编辑:我在Linux上使用git 1.7.9.5.git和shell命令的工作组合也是可以接受的.
cor*_*ump 61
Git的不处理通配符,使用的fnmatch(3) .请参阅Git词汇表中的pathspec条目.
但是为了确保git可以看到通配符,它们必须被转义,否则你的shell将首先展开它们.通常,我在单引号之间使用通配符:
git checkout myBranch -- '*/myFile.md'
Run Code Online (Sandbox Code Playgroud)
通配符应用于整个名称,包括目录.
正如您在文档中看到的那样,pathspec还允许使用魔术签名来更改如何解释pathspec.例如,您可以使用带有icase的不区分大小写的路径(您可以键入':(icase)*readme*'以查找所有自述文件).
我在这里引用@ bambams的评论,以防你在Windows中遇到问题:
这对我来说不适用于带有2.8.1.windows.1的Windows,而我正在使用cmd.exe shell中的Git,因此没有内置的全局内容.如果你处于这样一个令人遗憾的状态,有一个解决方案.结合
git diff --name-only并xargs实现您的目标:Run Code Online (Sandbox Code Playgroud)git diff --name-only <COMMIT> -- <GLOB>... | xargs git checkout <COMMIT>
Int*_*idd 21
Git不处理通配符,但你的shell确实如此.
试试这个 :
git checkout myBranch **/myFile.md
Run Code Online (Sandbox Code Playgroud)
和
git checkout myBranch **/*Test*
Run Code Online (Sandbox Code Playgroud)
使用**,您的shell将从当前工作目录开始查找所有子目录中的文件.
| 归档时间: |
|
| 查看次数: |
19862 次 |
| 最近记录: |