是否有可能将git存储到远程存储库?

在git中,是否可以创build一个存储,将存储推送到远程存储库,在另一台计算机上检索存储并应用存储?

或者我的select是:

  • 创build一个补丁并将该补丁复制到另一台计算机,或者
  • 创build一个小分支并将不完整的工作提交给该分支?

这是不可能通过获取或获取它,镜像refspec是fetch = +refs/*:refs/* ,即使隐藏是refs/stash它不会被发送。 明确的refs/stash:refs/stash也没有效果!

只会混淆不清,因为不会取所有的藏品,只有最新的藏品; 窗口列表是ref refs/stashesreflog

注意:我刚刚重写了这个答案24小时以上git-fu在我的腰带:)在我的shell历史上,整个shebang现在是三个单行。 不过,为了您的方便,我已经坚定了他们的意见。

这样,我希望你能看到我是如何做的,而不是盲目地复制/粘贴东西。


这是一步一步的。

假设是〜/ OLDREPO中包含存储的源文件。 创build一个不包含stashes的TEST克隆:

 cd ~/OLDREPO git clone . /tmp/TEST 

将所有的窗口推入临时分支:

 git send-pack /tmp/TEST $(for sha in $(git rev-list -g stash); \ do echo $sha:refs/heads/stash_$sha; done) 

在接收端循环变换回存储:

 cd /tmp/TEST/ for a in $(git rev-list --no-walk --glob='refs/heads/stash_*'); do git checkout $a && git reset HEAD^ && git stash save "$(git log --format='%s' -1 HEAD@{1})" done 

如果你愿意,清理你的临时分支机构

 git branch -D $(git branch|cut -c3-|grep ^stash_) 

做一个git存储列表,你会像这样的东西:

 stash@{0}: On (no branch): On testing: openmp import stash@{1}: On (no branch): On testing: zfsrc stash@{2}: On (no branch): WIP on sehe: 7006283 fixed wrong path to binary in debianized init script (reported as part of issue stash@{3}: On (no branch): WIP on debian-collab: c5c8037 zfs_pool_alert should be installed by default stash@{4}: On (no branch): WIP on xattrs: 3972694 removed braindead leftover -O0 flag stash@{5}: On (no branch): WIP on testing: 3972694 removed braindead leftover -O0 flag stash@{6}: On (no branch): WIP on testing: db9f77e fuse_unmount_all could be starved for the mtx lock stash@{7}: On (no branch): WIP on xattrs: db9f77e fuse_unmount_all could be starved for the mtx lock stash@{8}: On (no branch): WIP on testing: 28716d4 fixed implicit declaration of stat64 stash@{9}: On (no branch): WIP on emmanuel: bee6660 avoid unrelated changes 

在原始存储库上,看起来像

 stash@{0}: WIP on emmanuel: bee6660 avoid unrelated changes stash@{1}: WIP on testing: 28716d4 fixed implicit declaration of stat64 stash@{2}: WIP on xattrs: db9f77e fuse_unmount_all could be starved for the mtx lock stash@{3}: WIP on testing: db9f77e fuse_unmount_all could be starved for the mtx lock stash@{4}: WIP on testing: 3972694 removed braindead leftover -O0 flag stash@{5}: WIP on xattrs: 3972694 removed braindead leftover -O0 flag stash@{6}: WIP on debian-collab: c5c8037 zfs_pool_alert should be installed by default stash@{7}: WIP on sehe: 7006283 fixed wrong path to binary in debianized init script (reported as part of issue #57) stash@{8}: On testing: zfsrc stash@{9}: On testing: openmp import 

我对这个派对有点迟到,但是我相信我发现了一些对我有用的东西,如果你的情况相同或者相似的话,对你来说也是可以的。

我正在自己的分支上开发一个function。 分支并没有合并到主,直到完成或我已经提交,我觉得很适合向公众展示。 所以当我想将非暂存的更改传输到另一台计算机时,我所做的是:

  • 提交一个提交消息,如“ [non-commit] FOR TRANSFER ONLY ”,提供要传输的内容。
  • login到其他电脑。
  • 然后做:

    git pull ssh+git://<username>@<domain>/path/to/project/ rb:lb

    如果以不同的方式访问存储库,URL可能会有所不同。 这将把来自远程分支“rb”的那个URL的变化拉到本地分支“lb”。 请注意,我有一台运行在我自己的计算机上的ssh服务器,并且能够以这种方式访问​​存储库。

  • git reset HEAD^ (隐含 – --mixed

    这会将HEAD重置为指向“[non-commit]”提交之前的状态。

从git-reset(1):“– --mixed :重置索引而不是工作树(即保存更改的文件,但未标记为提交)[…]”

所以你最终会对你的文件进行修改,但是不需要提交任何提交,也不需要存储。

然而,这将要求你在你创build“[non-commit]”的仓库中git reset --hard HEAD^ ,因为这个提交是垃圾。

这有点晚,但这个答案可能有助于某人。 我想知道这一点,因为我希望能够推动一个正在进行的function/ bug /任何和在另一台计算机上的同一点工作。

对我来说,有效的方法就是提交我正在进行的代码(在我正在单独工作的一个分支中)。 当我到达另一台计算机时,执行下拉操作,然后撤消提交:

 git reset --soft HEAD^ 

继续按照原来的方式进行工作,所有正在进行的更改都是未提交的,未提交的。

希望它有帮助。

我会采取第二种方法,但不知道为什么你不能把它提交给主/精选分支。 也可以做樱桃采摘。

对于隐藏的想法,隐藏在当地地毯下不那么重要的东西。 没有人应该知道你最喜欢的废话;-)唯一的“但是”是:但是,如果我在几个工作站上发展? 然后scp更好。

解决这个问题似乎有一个非常巧妙的窍门。 您可以使用git diff > file.diff (并提交文件),然后使用git apply file.diff (从任何地方)恢复更改以实现相同的结果。

这里也解释了这一点。

以下内容不适用于隐藏,但在工作目录中的未提交更改。 它创build一个分支,自动提交所有当前的更改,并推送到远程:

 commit_and_push_ ( ) { # This will: # 1. checkout a new branch stash-XXX # 2. commit the current changes in that branch # 3. push the branch to the remote local locbr=${1:-autostash-XXX} git checkout -b $locbr git add . git commit -a -m "Automatically created commit" git push origin $locbr echo "Autocommitted changes in branch $locbr ..." } 

使用像:

 commit_and_push_ my-temp-branch commit_and_push_ 

就像这个人一样使用Dropbox。 这样你就不必担心因为你所有的代码都会被备份,所以你不必担心。

http://blog.sapegin.me/all/github-vs-dropbox