• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 在 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/wwwgit
    cd /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 -exec dos2unix {} \;
    
    # 执行完毕,格式转化后,再次提交
    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.git
    
    git 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