Git через svn - управление файлами - PullRequest
4 голосов
/ 03 августа 2010

Возможно, я что-то упускаю из-за использования gi через svn, но как мне сохранить набор локально измененных файлов, не отправляя эти изменения в subversion.

Вот мой сломанный рабочий процесс.

(on master) git svn rebase
git checkout -b issue
*apply changes I need on all my branches*
*changes*
git commit *changes*
git checkout master
git merge issue
git svn dcommit

Проблема заключается в том, что svn rebase или даже фиксация я теряю локально измененным, но не проверенным в файлах.Я не хочу фиксировать файлы, потому что я не хочу, чтобы они включались в коммит svn.

Как мой рабочий процесс должен работать в такой ситуации?

Ответы [ 3 ]

2 голосов
/ 03 августа 2010

Звучит так, как будто происходит сброс вашей ГОЛОВКИ. Чтобы избежать этого, используйте svn dcommit --no-rebase.

Однако я думаю, что ваш рабочий процесс несколько нарушен. Наличие незафиксированных файлов как бы побеждает цель, не так ли?

Вы, вероятно, должны использовать git stash. Это делает ваш новый рабочий процесс:

(on master) git svn rebase
git checkout -b issue
*apply changes I need on all my branches*
*changes*
git commit *changes*
git checkout master
git merge issue
git stash
git svn rebase
git svn dcommit
git stash apply

Назовите свои тайники соответствующим образом, и вы сможете делать все, что пытаетесь.

2 голосов
/ 03 августа 2010

Мой рабочий процесс git-svn выглядит примерно так:

(on master) git svn rebase
git checkout work
... make commits for all changes, including local-only and those I intend to push up
git checkout master
... cherry-pick changes from work branch
git svn dcommit
git checkout work
git rebase master

Последний шаг rebase удаляет все коммиты из рабочей ветви, которые уже были зафиксированы в восходящем направлении.

Дляшаг cherry-pick, на самом деле я использую небольшой скрипт оболочки, который автоматически получает все коммиты , за исключением те, которые имеют "NOCOMMIT" в своем описании.Вы можете использовать другой индикатор, такой как «LOCAL» или «NOPUSH» или любой другой.Это те коммиты, которые находятся в ветке «работа» и не передаются в Subversion.

Вот мой pull-work скрипт:

#!/bin/sh

BRANCH=`git branch | grep ^\\* | cut -d' ' -f2`
if [ $BRANCH != "master" ]; then
  echo "$0: Current branch is not master"
  exit 1
fi

git log --pretty=oneline work...master | grep -v -E '(NOCOMMIT|DEBUG):' | cut -d' ' -f1 | tac | xargs -l git cherry-pick

Обратите внимание на использование таких тонкостей, какtac, которые изменяют порядок перечисленных коммитов, поэтому они применяются к мастеру в том же порядке.

0 голосов
/ 25 октября 2011

Если это файл, которого нет в репо, вы всегда можете добавить его (или шаблон) в

.git/info/exclude
. Тогда это будет проигнорировано в git commitits и никогда не закончится тем, что его поместят в SVN.
...