使用过滤的历史记录将SVN迁移到Git

时间:2015-09-24 12:07:09

标签: git svn version-control version-control-migration

我想将项目从SVN迁移到Git并保留历史记录。

但是因为SVN存储库中有一些配置文件包含生产密码和其他敏感数据,所以我想从迁移的历史记录中排除这几个文件。

我将如何做到这一点?

2 个答案:

答案 0 :(得分:2)

最简单的解决方案是在本地计算机上使用migrate your SVN repository to Git ,然后在之前将remove the files that contain the sensitive data 推送到远程存储库。

例如:

# Migrate the SVN project into a local repo
git svn clone svn://server/svnroot \
    --authors-file=authors.txt \
    --no-metadata \
    -s your_project

cd your_project   

# Remove the 'passwd.txt' file from the history of the local repo
git filter-branch --force --index-filter \
    'git rm --cached --ignore-unmatch passwd.txt' \
    --prune-empty --tag-name-filter cat -- --all

只要您不将本地Git存储库推送到远程位置,就可以使用git filter-branch安全地从整个历史记录中删除任何文件。删除文件后,可以随时随地发布回购邮件。

git filter-branch的替代解决方案是使用名为BFG Repo-Cleaner的工具,该工具使用其自己的({3}} - 实现从Git存储库的历史记录中删除文件。对于faster,可能值得考虑,因为git filter-branch的性能至少线性到要处理的提交数。

答案 1 :(得分:-2)

基本上你有两个策略

  1. 首先清理SVN,然后迁移到GIT
  2. 首先迁移,然后在GIT中清理
  3. 先清理SVN,然后迁移到GIT

    根据SVN:

    “(...)您唯一的办法是svnadmin转储您的存储库,然后通过svndumpfilter(不包括坏路径)将转储文件传输到svnadmin加载命令(...)” < / p>

    http://subversion.apache.org/faq.html#removal

    首先迁移,然后在GIT中清理

    Github有一篇关于这个的好文章

    https://help.github.com/articles/remove-sensitive-data/