Git sparse checkout^一些根文件夹完全递归,另一些根文件夹没有递归

ar7v8xwq  于 12个月前  发布在  Git
关注(0)|答案(1)|浏览(121)

我使用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_dir2dir 21子文件夹中的文件(排除所有其他包含其内容的文件夹)-在我的特定示例中为file 22file 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/*/不是?为什么它是正确的工作,尽管?

js81xvg6

js81xvg61#

我的理解是,圆锥体模式下的预期模式是这样的(为了清晰起见,添加了白色线条):

/*
!/*/

/dirA/
!/dirA/*/

/dirA/dirB/
!/dirA/dirB/*/

/dirA/dirB/dirC/

字符串
(this将是运行git sparse-checkout add dirA/dirB/dirC的结果)
即一些目录,其中所有下面的内容都存在(在本例中为dirC),并且它们的所有父目录都存在其文件,但不存在其目录(在本例中为根目录,dirAdirB
而你没有。为了不得到你需要的警告:

/*
!/*/
/root_dir1/
!/root_dir1/*/
/root_dir2/
!/root_dir2/*/
/root_dir2/dir21/
!/root_dir2/dir21/*/


这使得git sparse-checkout reapply在没有警告的情况下工作,并让您处于锥形模式:

cat .git/config.worktree
[core]
        sparseCheckout = true
        sparseCheckoutCone = true


(使用Git 2.42.0测试)

相关问题