我是Git的新手。我想克隆一个大型的远程代码库,比如说xyzcodebase
。仓库的结构如下所示,对应不同的功能区域。
xyzcodebase
|
|__ Func area 1
|
|__ Func area 2
我从事功能区2
的工作,因此在克隆时我不想获取来自功能区1
(大型)的代码,这将节省很多时间。因此,在克隆后,我只会在本地仓库中拥有功能区2
的源代码。
是否有一种方法可以实现这种选择性地克隆git存储库呢?
提前感谢您的帮助。
我是Git的新手。我想克隆一个大型的远程代码库,比如说xyzcodebase
。仓库的结构如下所示,对应不同的功能区域。
xyzcodebase
|
|__ Func area 1
|
|__ Func area 2
我从事功能区2
的工作,因此在克隆时我不想获取来自功能区1
(大型)的代码,这将节省很多时间。因此,在克隆后,我只会在本地仓库中拥有功能区2
的源代码。
是否有一种方法可以实现这种选择性地克隆git存储库呢?
提前感谢您的帮助。
不,没有办法只克隆一个目录。Git将历史记录存储为对整个仓库的更改,而不是仅存储子树,如SVN。
如果您的项目包含多个功能,则可能最好将其拆分为一些子项目,使用不同的存储库,然后将其他存储库作为子模块包含在主项目中。但这取决于您的项目组织方式。
clone
只是一种花哨的方式来说 git init, git remote add, git fetch
,所以你仍然需要等待整个存储库的传输。您可以获取存储库的浅层副本(--depth
参数),但是如果没有完整的历史记录,您将无法提交和推送到远程,因此它仅适用于部署或代码审查,而不适用于开发(除非您将更改作为补丁发送给具有完整存储库的人)。 - MBO这是一个不太正规的解决方案,可能在特殊情况下有助于解决您的问题。特别是如果您只对单个文件感兴趣,您可以通过控制台(在Unix中)使用wget
下载它:
wget https://raw.githubusercontent.com/GITHUBUSER/REPOSITORY/master/file.ending
您可以通过在github中导航到该文件并单击“原始”来获取特定文件的链接。
最近出现了一些支持,但 Git 服务器需要支持 部分克隆 ,以便从其他目录中排除对象,不包含在生成的 pack 文件中。
另请参阅 https://docs.gitlab.com/ee/topics/git/partial_clone.html#filter-by-file-path 和 git-sparse-checkout。