我如何用特定的版本克隆git存储库,就像我通常在Mercurial中做的那样:
hg clone -r 3 /path/to/repository
我如何用特定的版本克隆git存储库,就像我通常在Mercurial中做的那样:
hg clone -r 3 /path/to/repository
当前回答
在一个特定的分支或标签上只克隆一个特定的提交:
git clone --depth=1 --branch NAME https://github.com/your/repo.git
不幸的是,NAME只能是分支名称或标记名称(不能提交SHA)。
省略——depth标志来下载整个历史记录,然后签出分支或标记:
git clone --branch NAME https://github.com/your/repo.git
这适用于最新版本的git(我使用2.18.0版本)。
其他回答
# 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,而您可以为它创建一个标记并克隆特殊标记。
对于单个文件,当提交号已知时,可以使用wget onliner:
wget https://raw.githubusercontent.com/torvalds/linux/896066ee1cf4d653057dac4e952f49c96ad16fa7/README
我使用这个代码片段和GNU make来关闭任何修订标记、分支或散列
这是在 Git 2.17.1版本
${dir}:
mkdir -p ${@D}
git clone --recursive --depth 1 --branch ${revison} ${url} ${@} \
|| git clone --recursive --branch ${revison} ${url} ${@} \
|| git clone ${url} ${@}
cd ${@} && git reset --hard ${revison}
ls $@
不需要下载整个历史,也不需要调用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 --depth=1 --branch NAME https://github.com/your/repo.git
不幸的是,NAME只能是分支名称或标记名称(不能提交SHA)。
省略——depth标志来下载整个历史记录,然后签出分支或标记:
git clone --branch NAME https://github.com/your/repo.git
这适用于最新版本的git(我使用2.18.0版本)。