我使用git2.40,我有这样的repo文件夹结构:
└── root_dir1
│ ├── dir11
│ │ └── file11
│ │
│ └── dir12
│ │ └── file12
│ │
│ └── file13
│
└── root_dir2
├── dir21
│ └── sub_dir21a
│ │ │
│ │ └── file21
│ │
│ └── file22
│
└── file23
字符串
我需要结帐:
1.直接放置在root_dir1中的文件(排除所有包含其内容的文件)-在我的特定示例中为file 13。
1.直接放置在root_dir2和dir 21子文件夹中的文件(排除所有其他包含其内容的文件夹)-在我的特定示例中为file 22和file 23。
我试过以下方法:
git clone --no-checkout --sparse repo_URL
git sparse-checkout set root_dir1 root_dir2
git checkout
型
之后,我编辑了.git\info\sparse-checkout
并添加了一些负模式:
/*
!/*/
/root_dir1/
/root_dir2/
#added some negative patterns
!/root_dir1/*/
!/root_dir2/dir21/*/
型
最后我打了git sparse-checkout reapply
。但是我收到了一个警告:
warning: unrecognized negative pattern: '/root_dir2/dir21/*' warning:
disabling cone pattern matching
型
尽管有这个警告,我得到了我需要的文件-看起来它的工作。但我很好奇我的负模式有什么问题?为什么!/root_dir1/*/
是有效的,但!/root_dir2/dir21/*/
不是?为什么它是正确的工作,尽管?
1条答案
按热度按时间js81xvg61#
我的理解是,圆锥体模式下的预期模式是这样的(为了清晰起见,添加了白色线条):
字符串
(this将是运行
git sparse-checkout add dirA/dirB/dirC
的结果)即一些目录,其中所有下面的内容都存在(在本例中为
dirC
),并且它们的所有父目录都存在其文件,但不存在其目录(在本例中为根目录,dirA
和dirB
)而你没有。为了不得到你需要的警告:
型
这使得
git sparse-checkout reapply
在没有警告的情况下工作,并让您处于锥形模式:型
(使用Git 2.42.0测试)