是否有可能将git存储到远程存储库?
在git中,是否可以创build一个存储,将存储推送到远程存储库,在另一台计算机上检索存储并应用存储?
或者我的select是:
- 创build一个补丁并将该补丁复制到另一台计算机,或者
- 创build一个小分支并将不完整的工作提交给该分支?
这是不可能通过获取或获取它,镜像refspec是fetch = +refs/*:refs/*
,即使隐藏是refs/stash
它不会被发送。 明确的refs/stash:refs/stash
也没有效果!
只会混淆不清,因为不会取所有的藏品,只有最新的藏品; 窗口列表是ref refs/stashes
的reflog 。
注意:我刚刚重写了这个答案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。 这样你就不必担心因为你所有的代码都会被备份,所以你不必担心。