能否提交并推送.git/config文件?迁移后如何共享SVN历史日志
问题解答:如何让其他用户看到SVN迁移过来的旧Git日志
核心结论
不能通过提交并推送.git/config文件让其他用户看到旧日志。.git/config是本地仓库专属的配置文件,Git默认不会追踪它,也不允许推送到远程仓库。你通过git svn fetch获取的旧日志存储在本地.git/svn目录中,这些内容不属于Git仓库的提交历史,所以git status会显示无内容可提交。
正确解决方法
要让所有用户都能看到完整的SVN旧日志,需要把SVN的历史合并到Git仓库的提交历史中,具体步骤如下:
方法1:重新完整迁移SVN到Git
如果之前的迁移没有导入SVN历史,直接重新克隆并推送:
- 从SVN仓库完整克隆所有历史:
(git svn clone --stdlayout <你的SVN仓库地址>--stdlayout适用于标准SVN目录结构(trunk/branches/tags),如果你的SVN结构不同,需调整参数) - 进入新克隆的Git仓库,关联远程Git仓库:
git remote add origin <你的远程Git仓库地址> - 推送到远程仓库(注意:如果远程已有内容,先备份再强制推送,或与现有内容合并):
git push -u origin --all git push -u origin --tags
方法2:在现有Git仓库中合并SVN历史
如果不想重新克隆,可在现有本地仓库中导入SVN历史并合并:
- 确保本地仓库无未提交修改,备份当前仓库
- 重新初始化SVN关联(如果之前的配置有问题):
git svn init <你的SVN仓库地址> --stdlayout - 拉取所有SVN历史:
git svn fetch - 找到SVN历史的最后一个提交(可用
git log --oneline svn/trunk查看),将现有Git提交合并到SVN历史之后:
(如果有冲突,手动解决后用git rebase svn/trunkgit add标记解决,再执行git rebase --continue) - 合并完成后,推送到远程仓库:
(强制推送会覆盖远程分支历史,需提前告知团队成员,确保大家都同步最新内容)git push origin <你的分支名> --force
注意事项
- 操作前必须备份原Git仓库和SVN仓库,避免数据丢失
- 如果远程Git仓库已有大量后续提交,合并历史时大概率会出现冲突,需要逐次解决
- 不要尝试提交
.git/config或.git/svn目录下的内容,这些是本地临时数据,不属于仓库的提交历史
内容的提问来源于stack exchange,提问作者kartiknasit
相关产品推荐
相关产品推荐

