我有一种情况,我使用gitHub来管理从使用svn的开源项目中提取的repo的更改。
在我意识到使用sed
更改内容之前,一切都很顺利,我已经更改了svn跟踪文件。手动修复太多了。
我基本上都有this problem。
我需要这些完整,所以我想我会做以下事情:
三个问题:
答案 0 :(得分:0)
通常,不要在目录之间复制Subversion元数据文件夹。 非常 很容易因此而陷入困境。
相反,请尝试创建一个脚本,该脚本将还原对Subversion元数据所做的更改。您可以使用命令find . -name .svn -exec some_command '{}' +
查找所有Subversion元数据文件夹并对其运行命令。将some_command
替换为您需要执行递归恢复到上一个已知工作状态所需的git命令。
另一个选择是在最后一个已知的工作状态下创建一个分支。在该分支中工作,合并所有更改,但对元数据文件夹的更改除外。根据元数据损坏后的时间长短,这可能是一种更简单的方法。
另请注意,如果您使用Subversion 1.7,这会更容易一些,因为每个工作副本只有一个.svn
文件夹,而不是每个目录一个。{1}}文件夹。在这种情况下,使用find
可能有点矫枉过正。
如果您需要删除“.svn
”文件夹以外的所有内容,请尝试使用find $folder -type f | grep -v '.svn' | xargs rm -f
命令。这将删除当前目录中的每个文件(递归到子目录),路径中没有“.svn”。
答案 1 :(得分:0)
发现我最初提出的方法运作得很好。
mkdir /home/build/REPOS/svnrepos && mkdir /home/build/REPOS/svnrepos/repos && mkdir /home/build/REPOS/svnrepos/files
cd /home/build/REPOS/svnrepos/repos && svnadmin create project_name
cd /home/build/REPOS/svnrepos/files && wget http://site.net/project_name.tar.gz && tar -xzf project_name.tar.gz
svn import /home/build/REPOS/svnrepos/files/project_name file:///home/build/REPOS/svnrepos/repos/project_name -m "Initial import of project_name"
cd /home/build/REPOS/gitrepos && mv GIT_Project GIT_Project_git
mkdir GIT_Project && svn co file:///home/build/REPOS/svnrepos/repos/project_name /home/build/REPOS/gitrepos/GIT_Project
cd /home/build/REPOS/gitrepos/GIT_Project && find . -type f | grep -v '.svn' | xargs rm -f
cd /home/build/REPOS/gitrepos/GIT_Project_git && rm -rf
找到。 -type d -name .svn`
cd /home/build/REPOS/gitrepos && tar -czf svn.tgz GIT_Project
rm -fr GIT_Project
mv GIT_Project_git GIT_Project
tar -xzkf svn.tgz
cd GIT_Project && svn status
svn add fileORfolder_1 && svn add fileORfolder_2 ... && svn add fileORfolder_n
svn delete fileORfolder_1 && svn delete fileORfolder_2 ... && svn delete fileORfolder_n
svn commit -m "Realign svn and git"