Make a shallow GIT repository less shallow

佐手、 提交于 2019-12-06 07:09:35

问题


I create a shallow clone for a specified tag:

git clone --branch v0.1.3 --depth 1 file:///c/usr/sites/smc .

After this the cloned repo only has the tag v0.1.3 (and associated files) in it. It does not have the history for all the changes before or after that tag (as I understand - correct me if wrong.) Next I would like to update the clone to include v0.1.4. If I use a "git fetch --unshallow" command, then I get the full history, which I do not want. Is there a way to expand my clone to include newer history from the master (like v0.1.4 and 0.1.5), but not older history (like 0.1.2)? (I see an option called update-shallow, but do not understand what it does or whether it is relevant.)

The goal of this is:

1) Make the initial setup of the repository on the remote server fast and small by not cloning the whole repo. (Our repo is mostly binaries: DLLs, EXEs.)

2) Make it possible to upgrade the remote repo to later versions (as given by the tag) but never earlier versions. Such an upgrade will only transfer a fraction of the repository, so it should also be fast.

NOTE: My Git version is 1.9.2.msysgit.0 on Windows 7. This includes the recent enhancements to shallow cloning. We will likely host the main repository on Linux, but the agents to which we deploy run Windows. The intent is to manage checkouts using puppet enterprise.

UPDATE: Tried VonC's suggestion.

$ git fetch --update-shallow origin v0.1.4
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 2), reused 0 (delta 0)
Unpacking objects: 100% (4/4), done.
From file:///c/usr/sites/smc
 * tag               v0.1.4     -> FETCH_HEAD

paul.chernoch@USB-XXXXXXXXX /c/usr/sites/smc-clone3 ((v0.1.3))
$ git describe
v0.1.3

paul.chernoch@USB-XXXXXXXXX /c/usr/sites/smc-clone3 ((v0.1.3))
$ git tag --list
v0.1.3

While the command seemed to do something, I do not see the tag v0.1.4 in my target repo. However, if I use the --tags option, I get all the tags, but also all the history! Also, I do not understand the notation "FETCH_HEAD" in the output of the git fetch command.

UPDATE: Further research shows that this SO question is after a similar goal: git shallow clone to specific tag


回答1:


Seems I had a similar question to this and found this afterwards. The trick was to specify the full refspec at the end and depth on the fetch command. refs/tags/v0.1.3:refs/tags/v0.1.3 or tag v0.1.3 for short

Git shallow fetch of a new tag

git fetch --depth 1 origin tag v0.1.4


来源:https://stackoverflow.com/questions/24294361/make-a-shallow-git-repository-less-shallow

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!