我正在尝试将一些文件从 SVN 导入到新的 git 存储库。
例如,我在 SVN 中有以下内容:
files/file1
files/file2
files/file3
files/image1
files/image2
我只想导入
files/image*
文件。
这可能吗?
我从你的标签中假设你正在使用 git-svn ?如果是这样,请查看
--ignore-paths
选项。在 git svn init
或 git svn clone
上使用它可以将您传递的值保留在本地配置中,或者在 git svn fetch
上使用它来忽略每次获取。
查看此链接。 http://ivanz.com/2009/01/15/selective-import-of-svn-branches-into-a-gitgit-svn-repository/希望这有帮助!
在 .git/config 中定义新分支:
[svn-remote "release-branch"]
url = svn+ssh://[email protected]/source/branches/mono-2-2/mcs
fetch = :refs/remotes/git-svn-release-branch
导入SVN分支。 SVN_BRANCHED_REVISION 是 SVN 中发生分支时的修订版本。
[~]$ git svn fetch release-branch -r SVN_BRANCHED_REVISION
将本地 Git 分支挂接到远程分支:
[~]$ git branch --track release git-svn-release-branch
查看并更新
[~]$ git checkout release
[~]$ git svn rebase
完成!
由于 git-svn 的 --ignore-paths 确实忽略文件和目录,但仍然保留引用这些被忽略文件的提交历史记录,我发现结果有时令人困惑。 --ignore-refs 到目前为止对我来说失败了。恕我直言,在颠覆方面进行过滤要容易得多。特别是当相关的 subversion 目录很大而子集很小时。当然,这仅在您想迁移到新的 git 存储库时可用。
subversion 附带 svnrdump 将存储库转储到文件中,并使用 svndumpfilter 删除该文件中的路径。然后,您使用 svnadmin 将转储加载到新存储库中,可以选择立即停止,然后进行手动调整(过滤的路径可能会导致不存在的父目录)。以及通过 git-svn 导入的已清理的 svn 存储库。
管理工具说明:https://svnbook.red-bean.com/en/1.7/svn.reposadmin.maint.html(对于真正的旧版本的 svn)