2

我有一个 git 存储库,它是我的开发存储库。我需要每周将所有更改上传到 svn 存储库 - 但我不想公开我的 git-commit-history。换句话说:我明确地想失去历史。给定一周内 git 存储库中的所有更改都需要压缩到一个 svn 提交。

一周的例子:

吉特:

commit 1 "fixed y"
commit 2 "added feature x"
commit 3 "foo"
commit 4 "fixed n"

SVN:

commit 1 "changes from this week"

理想情况下,它应该由通过 cron 作业自动启动的小型 shell 或 python 脚本来完成。

我有以下变量:

LOCAL_PATH=/tmp/git-svn-bridge/
GIT_DIR=git_repo
SVN_DIR=svn_repo

GIT_REPO_URL=git://git@my_git_server
GIT_REPO_NAME=my_git_repo
GIT_REPO_BRANCH=master

SVN_REPO_URL=svn://my_svn_server
SVN_USER=FIXME
SVN_PASS=FIXME

有任何想法吗?

谢谢阅读!

4

1 回答 1

0

这是一般的想法 - 用于git archive导出然后rsync -a --delete更新 svn 工作副本。类似于以下内容:

#!/bin/bash -xue

gitdir='/path/to/git/repo-clone/'  
gitbranch='master'

svncodir='/path/to/svn/svn-checkout' 
svnrepo='file:///tmp/svnrepo'  # no trailing slash

# if svn checkout doesn't exit
[[ ! -d $svncodir ]] && svn co $svnrepo $svncodir

# if svn checkout is pointing to a different repo
if svn info $svncodir | grep -qF "URL: $svnrepo"; then
  rm -rf $svncodir
  svn co $svnrepo $svncodir
fi

tmpdest=$(mktemp -d)
git --git-dir $gitdir/.git archive $gitbranch | tar -x -C $tmpdest

cd $svncodir
svn update

# sync our temporary dir with the current svn checkout
rsync -av --delete --force --exclude '.svn' $tmpdest/ .
rm -rf $tmpdest/

# svn add new or modified files
svn add . --force --no-ignore

# remove missing ones (whitespace safe, unless you have
# files with 5 spaces in them)
svn status | awk -F' {5,}' '/!/ {print $2}' | xargs -I'{}' svn rm '{}'

svn status 
svn commit -m "changes from this week"
于 2012-11-09T19:46:00.023 回答