将git子目录签出到特定文件夹中

将git子目录签出到特定文件夹中,git,Git,我想在我正在进行的一个项目中使用这个库,但我需要进行一些实践,并跟上它的发展速度。但是,我也希望以我通常的方式将所有依赖项放在ext/文件夹下 mkdir Test cd Test git init git config core.sparsecheckout true echo c++/ >> .git/info/sparse-checkout git remote add -f sodium https://github.com/SodiumFRP/sodium.git git

我想在我正在进行的一个项目中使用这个库,但我需要进行一些实践,并跟上它的发展速度。但是,我也希望以我通常的方式将所有依赖项放在
ext/
文件夹下

mkdir Test
cd Test
git init
git config core.sparsecheckout true
echo c++/ >> .git/info/sparse-checkout
git remote add -f sodium https://github.com/SodiumFRP/sodium.git
git pull sodium master
这给了我测试根目录中的
c++/
文件夹,这并不是特别有用。我希望它位于
ext/
文件夹中,并命名为
c++
以外的名称。重命名文件夹会导致它被视为未跟踪,这是不可取的,因为我可以通过从zip复制文件来实现这一点

如果我创建一个
ext/
目录,并从目录中执行
pull
命令,那么
c++
文件夹仍然在根目录中创建,而不是在执行pull命令的地方


有没有办法拉取一个特定的分支并将其复制到另一个名称的子目录中?

我将这样做:

假设您有一个名为main的主项目存储库:

为了完整起见 git init main 光盘主机 现在,为依赖项添加一个文件夹,并使其成为稀疏签出:

#创建并更改到目录
mkdir分机
光盘分机
只对C++目录进行稀疏检查
初始化
git config core.sparsecheckout true
echo c++/>.git/info/sparse签出
#添加远程存储库并将其签出
git远程添加-f钠https://github.com/SodiumFRP/sodium.git
git拉钠母版
然后有一个稀疏签出,作为子模块添加:

cd返回主存储库
#添加和提交子模块
git子模块添加。/ext
git提交-m“已添加子模块”
我用Git1.9.1测试了这一点

如果愿意,您可以添加另一个目录作为布局,如:

main
+ext#多个外部依赖项
|+钠
|+吉特
+ C++
+src#主要项目源文件

听起来像是一种很容易用符号链接解决的问题。但是你不想在ext目录中创建git存储库作为子模块,对吗?我不想要整个Na钠repo,不。我不需要Haskell、Java等版本的库。是的,但你仍然可以在ext中创建(稀疏的)Na钠存储库,而不是在TestI中,我通常将UnitTest++作为子模块添加,但当我查找有关获取repo子目录的信息时,我发现的只是
稀疏签出
。啊哈。我没有考虑过在主回购中复制远程存储库,并将其作为子模块添加。我尝试使用<代码> Git子模块ADD./Ext/Ext/NaOx/Cux>尝试添加一个重命名的C++目录,但它添加了整个钠树(Scala、Ru锈、java等)。有什么想法吗?@graham.reeds我不清楚你的话:我想你的意思是:克隆存储库时,你会得到提到的行为。是的,在第一次克隆存储库时,需要手动为每个依赖项执行稀疏签出的第一步。之后,您可以使用
git子模块update
仅更新稀疏签出。一个脚本在这里可能会有所帮助。@graham.reeds另外,您应该只添加
/ext/nadium
作为子模块,而不是
/ext
。我会让主存储库处理依赖项。更详细地说:我完成了将其添加为子模块的步骤。我希望通过指定文件夹的名称,它会将其重命名-我使用
git submodule add来实现这一点https://github.com/unittest-cpp/unittest-cpp.git ext/unittest++
将unittest cpp文件夹重命名为unittest++。虽然它有重命名的效果,但它会得到我不想要的所有其他文件夹。