windows Git sparse将子文件夹 checkout 到我的仓库文件夹中的不同位置

yftpprvb  于 2023-05-30  发布在  Windows
关注(0)|答案(1)|浏览(120)

让我们假设我们有一个Git repo,它有一个三级子文件夹:

|_
|_Folder1
|_Folder2
        |_ SubFolder2
                    |_ SubSubFolder2

我需要稀疏 checkout 此文件夹,并将其放置在C:\MyRepo文件夹内的不同位置(在Windows上)-摆脱领先的Folder 2目录:

C:\MyRepo
        |_ SubFolder2
                    |_ SubSubFolder2

这是可能的,或者Git稀疏 checkout 总是尊重原始(远程存储库)文件夹结构,不能改变?
P.S.我尝试了以下标准代码:

git clone --no-checkout --sparse <remoteRepoURL> "C:\MyRepo"
cd /d "C:\MyRepo"
git sparse-checkout set "Folder2/SubFolder2/SubSubFolder2"
git checkout

但我得到原始(远程存储库)文件夹结构:

C:\MyRepo
        |_Folder2
                |_ SubFolder2
                            |_ SubSubFolder2

有没有办法改变这种默认行为?
7年前有一个similar question问题-仍然没有明确的答案。

ar7v8xwq

ar7v8xwq1#

在git-bash中,首先将树读入一个临时索引文件。

GIT_INDEX_FILE=/tmp/.tmp.index git read-tree ${revision}:${parent_dir}

# In your case it could be
GIT_INDEX_FILE=/tmp/.tmp.index git read-tree HEAD:_Folder2

然后,将索引中的文件夹和文件 checkout 到目标。

GIT_INDEX_FILE=/tmp/.tmp.index git checkout-index -f -a --prefix=/c/MyRepo/

删除临时索引。我们还可以使用命令mktemp创建一个随机临时文件,以避免命名冲突。

rm -rf /tmp/.tmp.index

注意,在Windows上,/c/MyRepo/也可以是c:\\MyRepo\\。结尾/\\不能缺失。
对于Windows CMD(我尝试使用Microsoft Windows [Version 10.0.19042.1165]),

set GIT_INDEX_FILE=%TEMP%\.tmp.index
git read-tree HEAD:_Folder2
git checkout-index -f -a --prefix=c:\MyRepo\
set GIT_INDEX_FILE=
del %TEMP%\.tmp.index

我不熟悉Windows CMD,所以我不确定2个set命令是否正确。

相关问题