在 centOS 上搭建 Git 远程仓库(远程服务器端)
在远程服务器端中,用户种类:
- root:系统超级用户,属于 root 组。禁止 ssh 登录远程服务器 shell。
- admin:自定义管理员用户,属于 wheel 组。允许 ssh 登录远程服务器 shell。
- developer:自定义普通用户,属于 develop 组。允许 ssh 登录远程服务器 shell。对项目程序代码文件,是所有者。scp、sftp 下载上传文件。
- git:自定义普通用户,属于 develop 组。禁止 ssh 登录远程服务器 shell。对共享的 Git 仓库是所有者。Git 上传下载 Git 远程仓库。
在本机客户端中,用户种类:
- root:系统超级用户,属于 root 组。进入本机 ceonOS 时,默认使用的用户。为了个人方面,经常使用。
项目开发,需要保存代码开发版本。团队统一协作。这里介绍两种方式创建 Git 仓库。
- 没有项目代码,在远程服务器端,全新创建一个 Git 仓库。
- 已有项目代码,在远程服务器端,根据项目创建 Git 仓库。
无项目,创建 Git 仓库
在远程服务器端,选定一个目录/var/web/wwwgit作为 Git 仓库目录,并在其下创建 Git 仓:
mkdir -p /var/web/wwwgitcd /var/web/wwwgit # 初始化空仓库。参数 --bare 作用,是为了只保存历史提交的版本信息,不保存文件,作用就是作为分享库。git init --bare --shared project.git # 修改所有者、所属组chown -R git:develop /var/web/wwwgit
现在,所有对该服务器有 SSH 访问权限,并可读取 Git 仓库目录的用户,都克隆该项目:
git clone git@example.com:/var/web/wwwgit/project.git
- git:是登录服务端用户。
- example.com:服务器端地址,根据自己的实际情况修改。
- /var/web/wwwgit/project.git:服务器端 Git 项目仓库。
根据服务器端现有项目,创建 Git 仓库
远程服务器端,已经存在开发项目代码位置:/var/web/www/my_project。
第一步:初始化项目
# 进入项目根目录cd /var/web/my_project # 修改所有者、所属组chown -R developer:develop /var/web/my_project
编辑本地.gitignore文件,设置需要过滤的目录以及文件。根据自己的需要,自己修改:
/public/.htaccess /public/baidumap.xml /public/sitemap.xml /public/upload/robotLog.txt /public/upload/gather/ /storage/ /routes/ /config/ /node_modules/ /.idea /.vscode .env .env.backup .phpunit.result.cache Homestead.json Homestead.yaml npm-debug.log yarn-error.log
编辑本地.gitattributes文件,设置需要过滤的目录以及文件。根据自己的需要,自己修改:
* text=auto *.txt text *.png -text *.jpg -text *.jpeg -text *.gif -text *.svg -text *.ico binary *.blade.php diff=html *.css diff=css *.html diff=html *.md diff=markdown *.php diff=php /.github export-ignore CHANGELOG.md export-ignore
# 本地项目初始化git init # 把现有项目文件添加到缓存区git add .
若提交的时候报错:fatal: CRLF would be replaced by LF in app/xxx
。
# 使用工具处理单个文件dos2unix xxx.file # 进入项目根目录,递归地把当前目录下子目录 app 下的所有文件变成 unix 格式find ./app -type f -execdos2unix {} \; # 执行完毕,格式转化后,再次提交git add .
# 把现有项目文件提交到本地仓库git commit -m 'initial' # 查看分支:git branch
完成初始化项目后,在项目根目录下会一个本项目的 Git 仓库:/var/web/www/my_project/.git
第二步:创建 Git 裸仓库
远程服务器端,已经存在开发项目代码/var/web/www/my_project,远程服务器端,放置 Git 仓库的目录:/var/web/wwwgit
# 创建放置 Git 仓库的目录mkdir -p /var/web/wwwgit # 修改所有者、所属组chown -R git:develop /var/web/wwwgit # 进入放置 Git 仓库的目录cd /var/web/wwwgit
# 导入项目为 Git 裸仓库git clone --bare /var/web/www/my_project project.git
第三步:给裸仓库添加推送权限
# 进入Git 裸仓库cd /var/web/wwwgit/project.gitgit init --bare --shared # 修改所有者、所属组chown -R git:develop /var/web/wwwgit/project.git
第四步:关联仓库
# 进入项目根目录cd /var/web/my_project # 关联远程服务端仓库git remote add origin git@example.com:/var/wwwgit/project.git # 显示所有远程仓库git remote -v
- example:可以是 IP 地址,也可以是域名。
# 重新设置远程服务端仓库git remote set-url origin git@example.com:/var/wwwgit/project.git
git remote add origin/var/wwwgit/project.git
当面项目与 git 服务器,在同一个物理服务器上,采用这个命令的时候,推送到 Git 仓库时,创建的目录以及文件的所有者以及用户组,会是当前推送者所属的用户以及用户组。
比如:Git 远程仓的所有者 developer,所属组 develop。当前推送者(git push
)用户是 root,那么在 Git 仓库创建的文件所有者是 root,权限是 755。所以要注意 Git 仓库中文件所有文件以及目录保持与 Git 仓的一致。最佳推荐还是使用git@example.com:/var/wwwgit/project.git
地址,由 git 用户来创建写入文件,权限也保持一致。
第五步:测试推送
developer 用户,是普通用户。但是在其拥有者的目录下,是能行使众多命令的,比如备份 mysql 数据库:
mysqldump -u root -p mysqldatabase > mysqldatabase.sql
git add .git commit -m 'initial'git push origin master
第六步:克隆项目
现在,所有对该服务器有 SSH 访问权限,并可读取 Git 仓库目录的用户,都克隆该项目:
git clone git@example.com:/var/web/wwwgit/project.git