克隆git repo在specfic commit

时间:2017-03-29 00:29:12

标签: git

作为我们当前工作流程的一部分,我们在创建时将某些git repos预先克隆到用户homedirs中。但是,随着这些存储库的增长和用户数量的增加,磁盘使用率变得越来越成问题。

我在两个方面攻击这个问题:

  1. 没有更改文件的现有存储库获取git reset --hard $first_commit,使其恢复到更加微小的初始状态。登录时通常的git pull会一如既往地使它们保持最新状态。
  2. 新用户获得从$initial commit开始的回复,并且可以通过git pull提升到最新状态。
  3. 虽然我已经为#1提出了一个解决方案并提交给我审核,但是我很难找到一个不会产生大量IO开销的#2解决方案。

    简单的解决方案就是:

    git clone /opt/git/app.git /home/user/app && \
    git -C /home/user/app reset --hard $first_commit
    

    但是,检查完整工作树只是为了删除它会产生大量额外的IO,这在与所有必需用户一起创建新的应用服务器时是一个有效的问题。

    我已根据this answer尝试了以下内容,但由此产生的回购未正确设置为从origin/master拉出来:

    git init /home/user/app
    git -C /home/user/app remote add origin /opt/git/app.git
    git -C /home/user/app fetch origin $first_commit
    

    似乎没有任何分支设置,.git/config中缺少以下内容:

    [branch "master"]
            remote = origin
            merge = refs/heads/master
    

    提前致谢。

1 个答案:

答案 0 :(得分:1)

使用git branch --set-upstream-to设置master的上游:

git init
git remote add origin /opt/git/app.git
git fetch origin
git reset --hard "$first_commit"
git branch --set-upstream-to=origin/master