簡體   English   中英

自動存儲

[英]Automatically stashing

鏈中的最后一個鏈接:Stashing和 http://ftp.newartisans.com/pub/git.from.bottom.up.pdf中 的reflog建議經常存儲以拍攝正在進行的工作的快照。 作者建議您可以使用cron作業定期存儲您的工作,而無需手動執行存儲。

存儲的美妙之處在於它允許您將不顯眼的版本控制應用於您的工作過程本身:即,您的工作樹的各個階段,每天。 如果您願意,您甚至可以定期使用存儲,例如以下快照腳本:

 $ cat <<EOF > /usr/local/bin/git-snapshot #!/bin/sh git stash && git stash apply EOF $ chmod +x $_ $ git snapshot 

沒有理由你不能每小時從一個cron作業運行它,以及每周或每月運行reflog expire命令。

這種方法的問題是:

  1. 如果您的工作副本沒有變化,“git stash apply”將導致您的上一個藏匿點應用於您的工作副本。
  2. 在執行cron作業和處理工作副本的用戶之間可能存在競爭條件。 例如,運行“git stash”,然后用戶打開文件,然后執行腳本的“git stash apply”。

有沒有人建議讓這種自動存儲工作更可靠?

我肯定不會像那篇(其他優秀的)文章所描述的那樣設置自動存儲,原因就在於你引用的原因。

我更喜歡使用stash,因為它是打算使用的,我故意藏匿並在我工作時應用更改。 對於定期備份,我使用適當的備份解決方案。 在我看來,Git不能替代備份解決方案。

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

腳本可能需要一些拋光,但我希望你明白:)

對於我的個人使用(在3年內使用它),我在別名配置部分添加了這一行:

s = !sh -c \"git stash save | grep 'No local changes to save' && git $* || (git $* && git stash pop) \"

然后,我可以通過添加's'來自動運行每個git命令。 就像你的情況一樣:git s snaspshot

也許為時已晚,但希望有一天會幫助別人......

我更喜歡在藏匿管理之前進行分支管理:看看這里

為了備份,我推薦在線備份服務,類似於dropbox.com你根本不需要做任何事情,它只是跟蹤你在白天做的所有變化。

我已經啟用了所有我的git存儲庫,這可以幫助我專注於手頭的實際任務。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM