项目需要,将git仓库master代码copy到svn仓库的主干上,需要在linux上实现,只能老老实实敲命令了。
1. 解决方案
非常原始,首先创建/git目录,然后clone git仓库master最新代码,copy到/svn目录下,删除.git文件,然后使用svn add,commit到svn的分支上。
2. 直接写命令:
#创建git文件夹并进入目录,mkdir -p:递归创建目录,即使上级目录不存在,会按目录层级自动创建目录
mkdir -p /code/git
chmod -R 755 /code/git
cd /code/git
#clone git代码master最新代码,username和password自行填写
git clone http://username:password@git.xxx.com/demo.git
#创建svn文件夹,并设置权限
mkdir -p /code/git
chmod -R 755 /code/git
#checkout svn 仓库 base分支,--no-auth-cache:不会弹出提示进行yes/no确认
svn co http://svn.xxx.com/demo/base --username xxx --password xxx --no-auth-cache
#复制git代码数据到svn代码库目录下,demo为git库名称,base为svn仓库分支名目录
#cp -a复制所有文件,后面的/demo/.,其中的点[.]作用是把.开头的隐藏文件一起复制过去
#复制所有文件是因为代码存在.开头文件,防止没有复制全
cp -a /code/git/demo/. /code/svn/base
#进入svn仓库目录
cd /code/svn/base
#删除一同复制过来的.git文件
rm -rf .git/
#进行svn add clean commit操作
sudo svn cleanup
#svn add命令在linux上回忽略.开头的隐藏文件,钱买你添加 find . | xargs 可以将.文件一同提交
find . | xargs svn add --force *.*
sudo svn cleanup
sudo svn commit -m 'init' --username xxx --password xxx --no-auth-cache
3. 遇到的问题:
a) cp -r 没有复制点[.]开头的文件,解决办法:
使用cp -a /code/git/demo/. /code/svn/base,在最后加一个点(还需要删除.git文件)
b)svn add 命令忽略了点[.]开头的文件,解决办法:
使用Linux xargs命令 : find . | xargs svn add --force *.*