我如何用特定的版本克隆git存储库,就像我通常在Mercurial中做的那样:
hg clone -r 3 /path/to/repository
我如何用特定的版本克隆git存储库,就像我通常在Mercurial中做的那样:
hg clone -r 3 /path/to/repository
当前回答
我的版本是公认的答案和最多赞的答案的结合。但它有点不同,因为每个人都使用SHA1,但没有人告诉你如何获得它
$ git init
$ git remote add <remote_url>
$ git fetch --all
现在你可以看到所有的分支&提交
$ git branch -a
$ git log remotes/origin/master <-- or any other branch
最后,您知道了所需提交的SHA1
git reset --hard <sha1>
其他回答
不需要下载整个历史,也不需要调用git init:
git clone --depth=1 URL
git fetch --depth=1 origin SHA1
git checkout SHA1
git branch -D @{-1} # if you want to tidy up the fetched branch
这有缺点,对CB百利的回答是,你仍然会下载1个不必要的修订。但从技术上讲,它是一个git克隆(OP想要的),并且它不强制您下载某个分支的整个历史。
git clone -o <sha1-of-the-commit> <repository-url> <local-dir-name>
Git使用了origin这个词,而不是众所周知的revision
以下是手册$ git帮助克隆的一个片段
--origin <name>, -o <name>
Instead of using the remote name origin to keep track of the upstream repository, use <name>.
总结一下(git v. 1.7.2.1):
在你想要回购的地方做一个常规的git克隆(得到所有的日期-我知道,不是想要的,我们正在那里) Git checkout <sha1 rev>你想要的rev Git重置——很难 Git checkout -b master
我的版本是公认的答案和最多赞的答案的结合。但它有点不同,因为每个人都使用SHA1,但没有人告诉你如何获得它
$ git init
$ git remote add <remote_url>
$ git fetch --all
现在你可以看到所有的分支&提交
$ git branch -a
$ git log remotes/origin/master <-- or any other branch
最后,您知道了所需提交的SHA1
git reset --hard <sha1>
# clone special tag/branch without history
git clone --branch=<tag/branch> --depth=1 <repository>
# clone special revision with minimal histories
git clone --branch <branch> <repository> --shallow-since=yyyy-MM-ddTHH:mm:ss # get the commit time
cd <dir>
git reset --hard <revision>
如果不设置uploadpack,就不能获得没有历史记录的修订。在服务器端allowReachableSHA1InWant=true,而您可以为它创建一个标记并克隆特殊标记。