是否可以分段推送git存储库?

时间:2012-06-24 19:57:00

标签: git push commit refspec

我现在有一个超级慢连接,我需要将一个新分支推入我公司的git服务器。使用SVN,如果我愿意的话,我可以一次一个地将文件提交/推送到远程SVN服务器。在过去,当我连接速度慢时,我能够一次上传一个文件夹并且效果很好。我肯定可以在git中使用类似的东西。

2 个答案:

答案 0 :(得分:1)

当你执行git-push(1)时,手册说:

  

<src>通常是您想要推送的分支的名称,但它可以是任意“SHA-1表达式”,例如master~4或HEAD(请参阅gitrevisions(7))。

因此,您应该能够按照时间顺序将各个提交推送到远程,然后在详细的refspec中指定每个提交。例如:

# Get all commits not in remotes/origin/master and
# sort in chronological order.
commits_list=$(
    git log --oneline --reverse refs/remotes/origin/master..HEAD | 
    awk '{print $1}'
)

# Push each commit one-by-one to origin/master.
for commit in $commits_list; do
    git push origin $commit:refs/heads/master
done

我在本地进行了测试,它似乎按预期工作。试试看;如果不出意外,它会让你指向正确的方向。

答案 1 :(得分:0)

如果您的分支包含许多小提交,最多可添加一个大的更改,您可以通过分阶段提升提交来实现此目的。也许从代码与公司服务器上的代码分离开始创建一个新的分支,然后分阶段从分支中提取提交范围,并在每个范围被拉出后推送。

但推送单独的文件夹/文件 - 我很确定这是不可能的:它反对git要求提交是一个原子实体。