git有功能lke cvs的rtag

时间:2013-11-05 21:02:16

标签: git

在CVS中,我们可以使用“rtag”命令以编程方式创建现有源的新分支,该命令不需要存储库的副本。

git是否支持此类功能,在远程git存储库中创建现有文件的分支而没有它的本地副本?或者git的分布式特性是否排除了这个?

(我正在尝试保存20多分钟来制作一个独立的存储库副本,只是为了运行'git branch'命令。)

编辑以获取更多信息

如果我们有一个带有分支“ReleaseCandidate”的cvs存储库和一个名为“makearelease.sh”的脚本,该脚本可以在一个随机的空目录中运行像“cvs rtag -r ReleaseCandidate -b Release1p0”这样的命令,创建一个名为“Release1p0”的新分支,其中包含“ReleaseCandidate”分支中的所有文件,它不需要来自存储库或CVS分支“ReleaseCandidate”的文件的任何本地副本。

2 个答案:

答案 0 :(得分:5)

在git中,所有存储库都是本地的,总是。您可以拥有一个本地存储库的远程接口(例如,github的API为您提供的:repo是github的本地,API是一个接口),但repo本身是本地的。所以没有“远程回购”这样的东西,在这里你的意思是,只是一个“远程接口”。

也就是说,可以使用内置的远程接口(例如,推送协议git在ssh上使用)来创建新的分支或轻量级标记,而不实际拥有本地克隆,因为推送协议通过接收开始远程的引用(la git ls-remote),然后执行推送的系统可以发送对象包,引用更新或两者。您可以发送refs/heads/foorefs/tags/foo引用已知(来自收到的引用)头部SHA1并称之为好......但由于您可能会丢失与其他人的竞争,因此会非常容易出错添加新提交,从错误提交中分支或标记。因此,git没有内置任何东西。

所以,你可以写一个,但可能需要20多分钟。 : - )

答案 1 :(得分:0)

我不确定你在问什么。如果您要求可以在不复制文件的情况下创建仓库的新分支,答案是肯定的。 git checkout -b。这根本不复制任何文件。

如果您在询问是否可以创建远程存储库的部分版本,答案是否定的。每个git repo都是repo的完整克隆。没有部分存储库的概念。这是git内部的方式所必需的。 (为了构建树的SHA-1哈希,它必须哈希树中的所有文件。如果你试图创建树的部分副本,那么它的SHA-1哈希将不同于你试图部分克隆的分支。实际上,它们只是指向同一祖先的不同提交。)

如果你问的是你可以让你的本地工作目录看起来像一个远程非裸仓库的工作目录而不下载所有git的历史记录,答案是肯定的(编辑:带有“浅克隆”,谢谢你更正),但它无法帮助您以您想要的方式与遥控器进行交互。