Notiz an mich selber: Wenn ich zwei Repositories mergen will, indem ich
Repository A als Unterverzeichnis von Repository B einbinde, dann ist das ein
recht trivialer Rewrite-Vorgang, gefolgt von einem Merge ohne gemeinsame
Historie. Wenn Gerrit im Spiel ist kommt aber noch ein Commit-Filter hinzu,
damit ich die Change-DB anpassen kann:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
PREFIX=data
SQL=/tmp/rewrite-history.sql
:>$SQL
git filter-branch \
--index-filter '
git ls-files -s |
sed "s,\t,&'"$PREFIX"'/," |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new git update-index --index-info &&
mv $GIT_INDEX_FILE.new $GIT_INDEX_FILE
' \
--commit-filter '
n=$(git commit-tree "$@")
echo "UPDATE patch_sets SET revision = '\''$n'\'' WHERE revision = '\''$GIT_COMMIT'\'';" >> '$SQL'
echo $n
' HEAD
|
Danach kann man wie gehabt mergen:
1
2
3
|
REWRITTEN_WORKING_COPY_DIR=/tmp/hiera
git pull $REWRITTEN_WORKING_COPY_DIR--allow-unrelated-histories
git push --force origin HEAD:production
|
Das erzeugte File mit den SQLs kann man dann in “gerrit gsql” anwenden.