git
› Pro Git
› Atlassian Git Tutorial
› Pro Git 简体中文翻译
› GitX
jybox
V2EX  ›  git

因为有两台电脑 我需要一个跨设备的 git stash

  •  
  •   jybox · Nov 4, 2024 · 4199 views
    This topic created in 729 days ago, the information mentioned may be changed or developed.

    之前就记得其实 stash 也是一个特殊的 commit ,可以被 push 到远程仓库,于是写了两个 alias (在 ~/.gitconfig 里):

    [alias]
      wips = !(git stash -u | grep -qv 'No local changes to save' || (echo 'No local changes to save' && false)) && git stash show stash@{0} && (git push origin stash@{0}:refs/stashes/wip || (git stash pop && false)) && git stash drop -q
      wipl = !git fetch origin refs/stashes/wip && git stash apply FETCH_HEAD && git push -qd origin refs/stashes/wip
    

    使用时在需要暂存的设备上运行 git wips( Working In Progress Save )

    $ git wips
     2019/12.bean |  2 --
     2020/01.bean |  2 +-
     2024/07.bean |  6 ++--
     2024/08.bean | 97 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
     2024/09.bean | 89 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
     2024/10.bean | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
     2024/11.bean | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
     main.bean    |  3 ++
     8 files changed, 369 insertions(+), 6 deletions(-)
    Enumerating objects: 24, done.
    Counting objects: 100% (24/24), done.
    Delta compression using up to 12 threads
    Compressing objects: 100% (15/15), done.
    Writing objects: 100% (16/16), 3.30 KiB | 3.30 MiB/s, done.
    Total 16 (delta 10), reused 0 (delta 0), pack-reused 0 (from 0)
    To infinity:repos/accounting
     * [new reference]   stash@{0} -> refs/stashes/wip
    

    然后可以在其他配置了同一远程仓库的设备上运行 git wipl( Working In Progress Load )

    $ git wipl
    From infinity:repos/accounting
     * branch            refs/stashes/wip -> FETCH_HEAD
    On branch master
    Your branch is up to date with 'origin/master'.
    
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git restore <file>..." to discard changes in working directory)
    	modified:   2019/12.bean
    	modified:   2020/01.bean
    	modified:   2024/07.bean
    	modified:   main.bean
    
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
    	2024/08.bean
    	2024/09.bean
    	2024/10.bean
    	2024/11.bean
    
    no changes added to commit (use "git add" and/or "git commit -a")
    

    过程就是从当前的工作区创建一个 stash ,推到远程一个叫 stashes/wip 的特殊 ref 上,再从另外的设备上拉取并删除。目前版本很简单,一次只能存在一个 stash (重复运行 git wips 会报错),不过基本够我用了。

    后续有更新的话会更新在 这里

    16 replies  •  2025-02-27 01:30:53 +08:00
    quqiu
    quqiu
    Nov 4, 2024
    1
    为啥不直接开临时分支搞?
    Nasdaq
    Nasdaq
    Nov 4, 2024
    2
    为啥要分开,2 台电脑操作相同 git 不就好了吗(比如放在 NAS 里面)?
    jybox
    jybox
    OP
    Nov 4, 2024
    3
    @quqiu 建分支和建 commit 按说都需要起名字,在这种场景下我就是想要 git stash 这种比较临时、不需要起任何名字的语义。或者你理解成我规定了一个特殊的名字(`refs/stashes/wip`)来建分支也可以。
    @liu731 我觉得把 git 放在一个共享存储里不是一个好主意:如果是实时的共享存储那么就需要设备一直在线且性能受网络影响;如果支持离线同步的共享存储就可能会有文件冲突,git 本身就已经是一个用来同步改动解决冲突的系统了,如果还要给 git 本身来解决冲突就太麻烦了点。
    qwell
    qwell
    Nov 4, 2024
    4
    一边 commit ,另一边拉取再 reset 呢
    alexsz
    alexsz
    Nov 4, 2024
    5
    @quqiu #1 同问
    minglanyu
    minglanyu
    Nov 4, 2024
    6
    蛮小众的场景 不过确实属于 git 高级玩家了
    xe2vherd
    xe2vherd
    Nov 4, 2024
    7
    我也有类似的问题,仅 sync git stash 不够用啊,如果一台电脑本地提交了没推远程另一台电脑就废了。后来我直接 remote develop 了,但是网速是个问题
    wjfz
    wjfz
    Nov 4, 2024
    8
    这种情况我一般都是先 push
    在另一台电脑 pull 、git reset HEAD~,修改完之后再 git push -f
    jadehare
    jadehare
    Nov 4, 2024
    9
    commit 同步了再 rebase ?
    nebkad
    nebkad
    Nov 4, 2024
    10
    非常合理的软件需求分析和功能设计,写好了喊我试试
    yh7gdiaYW
    yh7gdiaYW
    Nov 4, 2024
    11
    我是用一个 git 和一个 svn 实现了差不都的效果
    webcape233
    webcape233
    Nov 4, 2024 via iPhone
    12
    我是家里两个电脑 syncthing...啥也不用管自己用不
    mengzhuo
    mengzhuo
    Nov 4, 2024
    13
    push 到一个无头分支,然后 cherry-pick 过来就行
    xe2vherd
    xe2vherd
    Nov 4, 2024
    14
    @webcape233 syncthing 同步不了 git 仓库,尤其是频繁修改的情况下
    quqiu
    quqiu
    Nov 5, 2024
    15
    @mengzhuo 可以的,stash 专用分支
    hzzhzzdogee
    hzzhzzdogee
    Feb 27, 2025
    16
    cool
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5166 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 63ms · UTC 02:56 · PVG 10:56 · LAX 18:56 · JFK 21:56
    ♥ Do have faith in what you're doing.