Git搭建及从SVN迁移
基于CentOS 8的Git 服务搭建
服务端创建仓库
- 安装gitShell
sudo dnf instal git
- 创建项目目录并进入Shell
mkdir /opt/ceshi.git cd ceshi.git/
- 初始化项目Shell
git init --bare --shared
分配用户
方式一:服务端分配
- 创建使用git的用户Shell若创建失误,可参考以下命令进行删除,remove参数可将home路径和邮件池等内容删除
sudo useradd --gid git --no-create-home --no-user-group --shell /usr/bin/git-shell --home-dir / xxxxlll
Shellsudo userdel --remove xxxxlll
- 修改用户密码Shell
sudo passwd xxxxlll
方式二:客户端分配
- 在用户终端生成公私钥对Shell执行后生成私钥git-client-xl及公钥git-client-xl.pub两个文件
ssh-keygen -t rsa -f git-client-xl
- 将公钥上传至GIT服务器,以用来免密登录Shell
ssh-copy-id -i git-client-xl.pub git@192.168.245.128
- 验证免密登录Shell
ssh git@192.168.245.128 [-i git-client-xl]
- 修改ssh配置文件Shell添加如下内容
sudo vi /etc/ssh/ssh_config.d/99-userkey.conf
propertiesIdentityFile ~/.ssh/git-client-xl
- 重启ssh服务Shell
systemctl restart sshd
- 配置Git用户信息Shell
git config --global user.name "xxxxlll" git config --global user.email "xxxxlll@sunxiaolong.net"
客户端使用
- 克隆代码库至本地Shell
git clone git@192.168.245.128:/opt/ceshi.git
- 尝试修改及提交Shell
cd ceshi touch testfile1 git add testfile1 git commit -m "提交测试" git push
- 无报错则服务正常可用
迁移SVN到Git
- 在SVN项目中过滤出所有用户Shell
svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /'
- 编辑用户映射关系,保存到users.mapping中Shell内容格式如下
vi ~/users.mapping
inixxxxlll = xxxxlll <xxxxlll@sunxiaolong.net>
- 安装git-svnShell
sudo dnf install git-svn
- 拉取代码Shell
git svn clone svn://10.19.208.133/ceshi --authors-file=~/users.mapping --no-metadata -s ceshi1
- 清理错乱的分支配置Shell
cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/ rm -Rf .git/refs/remotes/origin/tags
- 设置git关联Shell
git remote add origin git@my-git-server:myrepository.git
- 推送相关代码Shell
git push origin --all
QA
Q: push代码时出现“无法推送一些引用”
Shell
[git@git ceshi]$ git push
xxxxlll@192.168.245.128's password:
Could not chdir to home directory /home/xxxxlll: No such file or directory
枚举对象: 3, 完成.
对象计数中: 100% (3/3), 完成.
写入对象中: 100% (3/3), 203 bytes | 203.00 KiB/s, 完成.
Total 3 (delta 0), reused 0 (delta 0)
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: 默认禁止更新非纯仓库的当前分支,因为您推送的内容将导致索引和工作区
remote: 不一致,并且将需要执行 'git reset --hard' 将工作区匹配到 HEAD。
remote:
remote: 您可以在远程仓库中设置 'receive.denyCurrentBranch' 配置变量为
remote: 'ignore' 或 'warn' 以允许推送到当前分支。然而不推荐这么做,除非您
remote: 用某种方式将其工作区更新至您推送的状态。
remote:
remote: 若要屏蔽此信息且保持默认行为,设置 'receive.denyCurrentBranch'
remote: 配置变量为 'refuse'。
To 192.168.245.128:/opt/ceshi.git
! [remote rejected] master -> master (branch is currently checked out)
error: 无法推送一些引用到 'xxxxlll@192.168.245.128:/opt/ceshi.git'
A: 修改git服务端配置文件,以允许用户push代码
ini
[receive]
denyCurrentBranch = ignore