gitlab操纵手册

打印 上一主题 下一主题

主题 982|帖子 982|积分 2946

git操纵篇

1. 项目克隆

  1. git clone git@gitlab.test.cn:pro/project1.git
复制代码
2. 项目的提交

注:假如要查看文件的状态可以用git status下令:

如上图所示,文件已经修改了。
3. 项目的推送

  1. git push origin feature/test01
复制代码
  注:假如要查看远程的项目源地点可以如下下令:
git remote -v
  
4. 分支和gitflow流



  • master分支
master分支是最终版本的分支,是正式发布使用的,是受保护的分支,在master分支上不能随意修改



  • develop分支
develop分支从master分支拉取出来,作为功能分支的集身分支,这样也方便master分支上的全部提交分配一个版本号;如图所示:

  1. 1.如果在远程服务器上没有develop这个分支,那么在本地新建一个并上传
  2. git branch develop
  3. git push -u origin develop
  4. 2.如果远程已经存在,那么在本地直接远程check下来即可
  5. git checkout -b develop origin/develop
  6. 3.如果功能分支需要合并进来
  7. git pull origin //在合并进来之前最好先拉取一下,以免有冲突
  8. git merge feature/feature-lisi
复制代码



  • feature分支
feature分支也叫功能分支,就是对一个项目组按人员划分来建立分支好比张三,就是feature/feature-zhangsan,李四,就是feature/feature-lisi。功能分支不是从master中去fork分支(切记),而是将develop分支作为父分支。当功能开发完成后归并回develop分支。
这样子做的目的是每个人开发都相对独立,相互不受影响。其布局图所示:

  1. 如果是新的feature分支,在远程不存在的,那么从develop中创建出功能分支
  2. git checkout -b feature/feature-lisi develop
  3. 将本地的feature分支提交到远程服务器上
  4. git push origin feature/feature-lisi
  5. 如果远程featrue分支已经存在
  6. git checkout -b feature/lisi origin feature/lisi
复制代码



  • release分支
到了发布的时间,专门为发布预备了一个分支就是release分支,它从develop中fork出来,这么做的目的是一个团队可以在美满当前的发布版本的同时,另一个团队可以继续开发下一个版本。
而且这个版本只做上线前的bug修复用(即测试测出来的bug修改),不能新增功能,一旦归并到master分支后,也同时要将所做的修改归并到develop分支中去。其布局图所示:

  1. 1. 从develop中fork一个分支
  2. git checkout -b release-0.1 develop
  3. 2. 发布时的操作
  4. git checkout master
  5. git merge release-0.1
  6. git push
  7. 3. 一定要合并回develop
  8. git checkout develop
  9. git merge release-0.1
  10. git push
  11. 4. 删除发布分支
  12. git branch -d release-0.1
复制代码



  • hotfix分支
hotfix分支也叫维护分支或者热修复分支,用于快速给生产线上的产物打补丁用(好比客户在生产线上发现了告急bug必要立刻修复),这是唯一从master分支中去fork出来的分支,修复完成后,将修改的要归并到develop分支,master分支应该用新的版本号打好tag。
这样做的目的是,让团队快速解决掉问题,而不用打断其他工作或等待下一个发布。可以理解成在master分支上处理处罚的暂时发布。布局图如图所示:

  1. 1. 从master中fork出一个分支
  2. git checkout -b hotfix-001 master
  3. 2. 修改完bug,进行合并提交
  4. git checkout master
  5. git merge hotfix-001
  6. git push
  7. 3. 切换到develop分支进行合并提交
  8. git checkout develop
  9. git merge hotfix-001
  10. git push
  11. 4. 删除热修复分支
  12. git branch -d hotfix-001
复制代码
  注:在切换到某个分支的时间,必须必要对这个分支做一个拉取,以免出现冲突
  1. git pull origin [分支名]
复制代码

5. 项目还原到汗青版本

假如我们开发时间,发现错了想还原到具体某一个版本,git也很方便。


  • 先通过查找日记查找版本号
  1. git log [文件名]
复制代码
每次,修改提交都有一个记录编号



  • 还原到某个版本
    可以从日记中找到某个日记编号进行还原,比我我要还原成2月份的一个版本
git查看版本树
  1. git log --oneline --graph --decorate --all
复制代码
  1. git reset --hard e957e52aa922b7b95b4d6bc85159fa41d466acd3
复制代码
  注:假如还原到上一个版本或者上上个版本
  1. git reset --hard HEAD^   //还原到上一个版本
  2. git reset --hard HEAD^^  //还原到上上个版本
复制代码
6.归并之rebase和merge



  • rebase
  1. git checkout develop
  2. git rebase -i[分支A]
复制代码
rebase操纵时,是从两个分支共同的commit节点开始,将当前的分支develop的commit都提取出
来,追加到分支A上,有冲突就解决冲突,归并完成后会将develop原来提交的commit记录号删除掉,在末了重新生成新的commit记录号,
以是rebase不会产生多个commit,可以节省资源,但同时比力坑的是,假如多次commit有冲突,必要解决多次冲突


  • merge
  1. git checkout develop
  2. git merge [分支A]
复制代码
merge操纵时,两个分支共同的节点号,以及他们最新提交的节点,一起归并生成一个最新的节点。冲突只要解决一次就行,但同时也会产生多个commit。从公司多人协作项目考虑,建议用merge.


  • 总结
    我们在使用归并代码时,默认是使用fast-forword模式,这种模式不会生存commit记录,在归并和删除分支时会将分支信息删除掉。
  1. git rebase --onto develop
  2. 提示:
  3. First,rewinding head to replay your work on top of it...
  4. Fast-forwarded master to develop.
复制代码
  1. git merge develop
  2. 提示:
  3. Updating 5a8b732..85a33e2Fast-forward
  4. 2.txt |1 -
  5. 1 file changed, 1 deletion(-)
复制代码
在使用git pull时其实是拉取远程文件 和 归并的一个组合
  1. git pull= git fetch + git merge
  2. git pull-r= git fetch + git rebase
复制代码
7. 冲突解决

好比有文件2.txt初始内容如下:
  1. develop分支添加2.txt文件
  2. develop分支合并了内容
  3. 3333333
  4. 111111
复制代码
现在有两个分支masert,develop都不小心修改了同样的内容:
develop:
  1. develop分支添加2.txt文件
  2. develop分支合并了内容
  3. develop分支修改了内容
复制代码
master:
  1. develop分支添加2.txt文件:
  2. develop分支合并了内容,
  3. master分支修改了内容
复制代码
这个时间,在master分支下,将develop归并进去
  1. git checkout master
  2. git merge develop
  3. 提示:
  4. Auto-merging 2.txt
  5. CONFLICT(content):Merge conflict in 2.txtAutomatic merge failed;
  6. fix conflicts and then commit the result.
复制代码
提示在归并2.txt文件时发生冲突如图所示:

<<<<< HEAD 和 ===== 之间的表示当前分支下所修改的内容,
=======和 >>>>> develop之间的表示develop分支的内容。
接下来就来解决冲突,选择此中一行的内容,也可以两行都保留,很简单只必要<<<<<HEAD,======,>>>>>>> develop去掉,在这个例子以develop分支修改的为主,然后再提交。
  1. develop分支添加2.txt文件
  2. develop分支合并了内容
  3. develop分支修改了内容
复制代码
  1. git add 2.txt
  2. git commit -m"2.txt冲突解决'
  3. 提示:
  4. [master 5a8b732]2.txt冲突解决
复制代码
gitlab操纵篇

   gitlab master分支第一次push代码的时间只有主程序员才能推送,其他脚色推送不了会报错
  1.gitlab项目新建



  • 1.1 进项目首页

  • 1.2 创建空白项目(比力常用)

  • 1.3 通过模板来进行创建(选择了模板之后,会自动生成框架,直接使用就行)

  • 1.4 还可以通过从其他git源导入进来

2.sshkey设置



  • 2.1 在本机生成sshkey,下面以mac下面为例进行演示,windows平台下的网上自己搜索。
  1. 1. 进入.ssh目录
  2. cd ~/.ssh
  3. 2. 生成SSH密钥
  4. 默认名称:
  5. ssh-keygen -t rsa -C "你的个人邮箱"
  6. 自定义名称:
  7. ssh-keygen -t rsa -f "密钥名称" -C "你的个人邮箱"
  8. 例子:
  9. ssh-keygen -t rsa -f "id_rsa_xinhui" -C "hjc_042043@sina.cn"
  10. 接下来直接回车下去,不用输入passphrase内容,不然每次操作都要输入passphrase
  11. 3. 获取SSH公钥信息
  12. 这时在.ssh目录下会生成两个文件,私钥id_rsa和公钥id_rsa.pub两个密钥文件。
复制代码


  • 2.2 在gitlab平台添加sshkey
可以将id_rsa.pub文件内容复制出来,然后黏贴到gitlab平台


添加乐成之后看如图所示:



  • 2.3 假如有多个git源仓库,怎么办?
假如有多个git源库,好比既有gitlab,又有github版本库的时间,那么SSHkey必要做区分,必要在~/.ssh目录中添加一个config文件,以及known_hosts文件,config文件主要是来管理git源,known_host是来管理私钥内容,内容如下:
  1. # gitlab
  2. Host 192.168..0.103
  3. HostName 192.168..0.103
  4. User allen.huang
  5. IdentityFile ~/.ssh/id_rsa
  6. # github
  7. Host github.com
  8. HostName github.com
  9. User hjc1985
  10. IdentityFile ~/.ssh/id_rsa_github
  11. # golivecc
  12. Host 192.168.0.102
  13. HostName 192.168.0.102
  14. User hjc
  15. IdentityFile ~/.ssh/id_rsa_golivecc
  16. # 对Host进行测试:
  17. $ ssh -T git@192.168.0.102
  18. Welcome to GitLab, 黄锦潮!     #如果输出如下结果表示成功
复制代码
参考:
https://segmentfault.com/a/1190000002994742
http://blog.csdn.net/baidu_35738377/article/details/54580156
3.代码上传



  • Git用户名和邮箱的设置
   注:假如有多个git源,不能用 git config --global
  1. git config user.name "你注册的用户名"
  2. git config user.email "你注册的邮箱"
复制代码


  • 创建新版本库
  1. git clone git@192.168.0.102:git-test/demo.git
  2. cd phptest
  3. touch README.md
  4. git add README.md
  5. git commit -m "add README"
  6. git push -u origin master
复制代码
设置gitignore
   在.gitignore文件中例如可以把缓存,日记类的文件忽略掉把.DS_Store (mac下有,windows下没有),thumbs.db, data/logs, data/caches等


  

  • 假如已存在的文件夹
  1. cd existing_folder
  2. # 初始化git仓库
  3. git init
  4. # 将远程git库和当前的库进行绑定
  5. git remote add origin git@192.168.0.102:git-test/demo.git
  6. git add .
  7. git commit -m "Initial commit"
  8. git push -u origin master
复制代码


  • 假如已存在的 Git 版本库
  1. cd existing_repo
  2. git remote rename origin old-origin
  3. git remote add origin git@192.168.0.102:git-test/demo.git
  4. git push -u origin --all
  5. git push -u origin --tags
复制代码


  • git使用nginx进行域名的反向代理
  1. #PROXY-START/
  2. location  ~* \.(php|jsp|cgi|asp|aspx)$
  3. {
  4.     proxy_pass http://localhost:8099;
  5.     proxy_set_header Host $host;
  6.     proxy_set_header X-Real-IP $remote_addr;
  7.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  8.     proxy_set_header REMOTE-HOST $remote_addr;
  9. }
  10. location /
  11. {
  12.     proxy_pass http://localhost:8099;
  13.     proxy_set_header Host $host;
  14.     proxy_set_header X-Real-IP $remote_addr;
  15.     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  16.     proxy_set_header REMOTE-HOST $remote_addr;
  17.    
  18.     add_header X-Cache $upstream_cache_status;
  19.    
  20.     #Set Nginx Cache
  21.    
  22.         add_header Cache-Control no-cache;
  23.     expires 12h;
  24. }
复制代码
  1. server
  2. {
  3.     listen 80;
  4.     server_name git.programlife.tech;
  5.     index index.php index.html index.htm default.php default.htm default.html;
  6.     root /www/wwwroot/git.programlife.tech;
  7.    
  8.     #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
  9.     #error_page 404/404.html;
  10.     #SSL-END
  11.    
  12.     #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
  13.     #error_page 404 /404.html;
  14.     #error_page 502 /502.html;
  15.     #ERROR-PAGE-END
  16.    
  17.     #PHP-INFO-START  PHP引用配置,可以注释或修改
  18.     #清理缓存规则
  19.     location ~ /purge(/.*) {
  20.         proxy_cache_purge cache_one $host$1$is_args$args;
  21.         #access_log  /www/wwwlogs/git.programlife.tech_purge_cache.log;
  22.     }
  23.     #引用反向代理规则,注释后配置的反向代理将无效
  24.     include /www/server/panel/vhost/nginx/proxy/git.programlife.tech/*.conf;
  25.     include enable-php-00.conf;
  26.     #PHP-INFO-END
  27.    
  28.     #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
  29.     include /www/server/panel/vhost/rewrite/git.programlife.tech.conf;
  30.     #REWRITE-END
  31.    
  32.     #禁止访问的文件或目录
  33.     location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
  34.     {
  35.         return 404;
  36.     }
  37.    
  38.     #一键申请SSL证书验证目录相关设置
  39.     location ~ \.well-known{
  40.         allow all;
  41.     }
  42.     access_log  /www/wwwlogs/git.programlife.tech.log;
  43.     error_log  /www/wwwlogs/git.programlife.tech.error.log;
  44. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

美丽的神话

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表