可能是重复的问题:
有没有办法仅克隆git存储库的子目录?
我正在尝试克隆github项目的部分内容,但我只能获取根文件夹。 这是我第一次尝试使用github,我刚刚安装了tortoisegit,我习惯于svn和cvs,可以只取出想要检出的文件夹,但似乎git只在根文件夹中有一个.git文件,所以我不确定该怎么做。
可能是重复的问题:
有没有办法仅克隆git存储库的子目录?
我正在尝试克隆github项目的部分内容,但我只能获取根文件夹。 这是我第一次尝试使用github,我刚刚安装了tortoisegit,我习惯于svn和cvs,可以只取出想要检出的文件夹,但似乎git只在根文件夹中有一个.git文件,所以我不确定该怎么做。
这里有一种子树合并的方法。
但是,以下是一种更简单但只是部分解决方案,也许对您的需求已经足够。只需要fork一个版本库,并定期将其合并回来即可。
在未来,当您想要与上游Git代码同步时,只需将其与您的Fork合并即可。您保留的文件将与上游的文件同步,您可能需要进行一些小的清理,这很容易从git status
中看到。
最后,如果你只想下载最新的文件,你可以使用git archive
下载特定分支、标签(或任何提交)的tar文件。这可能在GitHub上无法正常工作(这取决于服务器配置),我没有检查过。即使它不能直接工作,你也可以克隆到自己的“裸”,镜像仓库,然后从那里拉取(子树)归档。
这不是你在git中要做的事情。记住,你正在使用DVCS,因此你正在拉取整个存储库历史记录 - 那些更改目录之外文件的提交应该发生什么?
如果一个项目足够大,那么你克隆的任何repo的维护者都应该使用子模块来划分部分,以便开发人员只能拉取他们想要工作的区域。
Git(以及一般的DVCS)并不是为最终用户而设计的,而是为开发人员而设计的。我发现git(特别是与github结合使用)对编码非常有帮助。如果有一个我想要贡献的github项目,我只需fork它,拉下来,hackhackhack,推上去,然后发送一个pull请求,非常容易,而不是进行checkout,hack,创建差异,尝试找到要发送到哪里的位置,并希望差异在开发人员合并之前不会出错。
Git整体而言比svn更加复杂,但这是因为编程本身就是一个复杂的过程。对我来说,集中式版本控制工作流程非常痛苦,因为我习惯了分布式版本控制系统,而且我不能做我习惯做的所有事情。所以,如果你做相同的事情,使用git相对于svn会更加复杂,但优点是你可以做很多更多的事情。Git是为Linux内核开发而开发的,这一点非常明显。