Автоматически копить - PullRequest
       26

Автоматически копить

9 голосов
/ 18 ноября 2008

Раздел Последние ссылки в цепочке: Скопирование и рефлог в http://ftp.newartisans.com/pub/git.from.bottom.up.pdf рекомендует часто копить, чтобы делать снимки вашей работы. Автор доходит до того, что рекомендует использовать задание 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» приведет к тому, что ваш последний stash будет применен к вашей рабочей копии.
  2. Могут быть условия гонки между тем, когда задание cron выполняется и пользователем, работающим с рабочей копией. Например, «git stash» запускается, затем пользователь открывает файл, затем выполняется сценарий «git stash apply».

У кого-нибудь есть предложения по обеспечению более надежной работы этой автоматической системы?

Ответы [ 5 ]

13 голосов
/ 18 ноября 2008

Я бы точно не настроил автоматическое копирование, как описано в той (иначе превосходной) статье, именно по тем причинам, на которые вы ссылаетесь.

Я предпочитаю использовать тайник так, как он предназначен для этого, где я намеренно прячу и применяю изменения во время работы. Для периодического резервного копирования я использую правильное решение для резервного копирования. По моему мнению, Git не является заменой решения для резервного копирования.

8 голосов
/ 06 января 2009

git stash - это всего лишь небольшой сценарий оболочки, который создает коммит, на который нет ссылок ни в одной ветке. Вы можете подражать этому поведению без условий гонки:

#!/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 голосов
/ 12 марта 2013

Для личного использования (работая с этим в течение 3 лет) я добавил эту строку в раздел конфигурации псевдонима:

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

Затем я могу запустить каждую команду git с автоматическим запоминанием, просто добавив перед собой 's'. Вот как в вашем случае: git s snaspshot

Возможно, слишком поздно, но надеюсь, что это кому-нибудь поможет, однажды ...

2 голосов
/ 11 мая 2009

Я предпочитаю управление филиалами перед управлением тайниками: посмотрите здесь

0 голосов
/ 13 марта 2010

Для резервного копирования я бы порекомендовал онлайн-сервис резервного копирования, аналогичный dropbox.com Вам буквально не нужно ничего делать, он просто отслеживает все изменения, которые вы делаете для вас в течение дня.

Я включил его для всех моих репозиториев git, что просто помогает мне сосредоточиться на текущей задаче.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...