Пробовали ли вы взглянуть на некоторые существующие решения для перемещения наборов изменений между системами контроля версий, такие как Tailor , в которых говорится, что он включает поддержку git и darcs? (На этой странице также есть предложения по аналогичным системам.)
В противном случае, если вы хотите использовать предложенный подход, вы можете использовать git checkout
при каждом коммите после HEAD
до origin/master
, чтобы оформить этот коммит в режиме «detached HEAD». Например, чтобы изменить пример, который вы даете (и я боюсь, что в оболочке Bourne, так как я не использую ksh):
# Update all remote-tracking branches from origin
git fetch origin
for c in `git log --pretty=format:"%h" HEAD..origin/master`
do
git checkout $c
author=$(git log -1 --pretty=format:"%an <%ae>")
logfile=$(mktemp)
git log -1 --pretty=format:"%s%n%n%b%n" > $logfile
darcs add -q --umask=0002 -r .
darcs record -a -A "$author" --logfile="$logfile"
darcs push -a
rm -f $logfile
done
# Now go back to master, and merge to keep your master branch up to date:
git checkout master
git merge origin/master
Обратите внимание, что это будет линеаризовать историю из git, что не будет тем, что я хотел лично. :) Я думаю, что для этого лучше всего использовать существующий инструмент, но вышеописанный подход можно использовать.