链中的最后一个链接:[{3}}中的Stashing和reflog 建议经常存储以拍摄正在进行的工作的快照。作者甚至建议您可以使用cron作业定期存储您的工作,而无需手动存储。
藏匿的美妙之处在于它可以让您在工作中应用不显眼的版本控制 过程本身:即每天工作树的各个阶段。你甚至可以使用 如果您愿意,可以定期藏匿,例如以下快照脚本:
$ cat <<EOF > /usr/local/bin/git-snapshot #!/bin/sh git stash && git stash apply EOF $ chmod +x $_ $ git snapshot
没有理由不能每小时从一个cron作业运行它,以及每周或每月运行reflog expire命令。
这种方法的问题是:
有没有人建议让这种自动存储工作更可靠?
答案 0 :(得分:13)
我确实不会设置自动存储,就像那篇(优秀的)文章所描述的那样,正是因为你引用的原因。
我更喜欢使用存储,因为它是打算使用的,我故意藏匿并在我工作时应用更改。对于定期备份,我使用适当的备份解决方案。在我看来,Git不能替代备份解决方案。
答案 1 :(得分:8)
git stash实际上只是一个小shell脚本,它创建了一个未在任何分支中引用的提交。您可以在没有竞争条件的情况下模拟此行为:
#!/bin/sh
GIT_DIR=$(git rev-parse --git-dir) || exit
ref_stash=refs/stash
w_commit=$(git stash create) # creates a commit for the wip
# gather some info
head=$(git log --no-color --abbrev-commit --pretty=oneline -n 1 HEAD --)
branch=$(git symbolic-ref -q HEAD)
branch=${branch#refs/heads/}
msg=$(printf 'WIP on %s: %s' "$branch" "$head")
# Make sure the reflog for stash is kept.
: >>"$GIT_DIR/logs/$ref_stash"
git update-ref -m "$msg" $ref_stash $w_commit
脚本可能需要一些抛光,但我希望你能得到这个想法:)
答案 2 :(得分:3)
对于我的个人使用(在3年内使用它),我在别名配置部分添加了这一行:
s = !sh -c \"git stash save | grep 'No local changes to save' && git $* || (git $* && git stash pop) \"
然后,我可以通过添加's'来自动运行每个git命令。就像你的情况一样: git s snaspshot
也许为时已晚,但希望有一天会帮助某人......
答案 3 :(得分:2)
我更喜欢在藏匿管理之前进行分支管理:看看here
答案 4 :(得分:0)
为了备份,我推荐在线备份服务,类似于dropbox.com 你根本不需要做任何事情,只是跟踪你在白天为你做的所有改变。
我为所有git存储库启用了它,这可以帮助我专注于手头的实际任务。