git远程分支管理, 标签管理, git别名, git私有服务器

远程分支管理

  • 对于分支的应用,建议大家以这样的原则来:
  • master分支是非常重要的,线上发布代码用这个分支,平时我们开发代码不要在这个分支上。
  • 创建一个dev分支,专门用作开发,只有当发布到线上之前,才会把dev分支合并到master
  • 开发人员应该在dev的基础上再分支成个人分支,个人分支(在自己pc上)里面开发代码,然后合并到dev分支
    在这里插入图片描述
  • dev分支合并bob分支的命令是:
  • git checkout dev //先切换到dev分支,然后
  • git merge bob

远程分支管理

  • 本地新建的分支如果不推送到远程,对其他人就是不可见的
  • 查看远程分支 git ls-remote origin,可以看到所有分支
  • 对于git push分支分两种情况

当本地分支和远程分支一致时
git push会把所有本地分支的变更一同推送到远程,如果想只推送一个分支,使用git push origin branch-name

当本地分支比远程分支多,默认git push 只推送本地和远程一致的分支,想要把多出来的本地分支推送到远程时,使用git push origin branch-name 如果推送失败,先用git pull抓取远程的新提交

  • git clone的时候默认只把master分支克隆下来,如果想把所有分支都克隆下来,需要手动创建,在本地创建和远程分支对应的分支,使用git checkout -b branch-name origin/branch-name,本地和远程分支的名称要一致
[root@draft git]# git clone [email protected]:tanyyinyu/git2.git   #复制一个远程仓库,只会复制master;
正克隆到 'git2'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
接收对象中: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
[root@draft git]# cd git2
[root@draft git2]# 
[root@draft git2]# ls
README.md
[root@draft git2]# git ls-remote origin     #远程分支显示;
71a1ddef5fa0f211373c38991762a0473582b37d	HEAD
71a1ddef5fa0f211373c38991762a0473582b37d	refs/heads/master
[root@draft git2]# git ls-remote origin     #远程界面增加了一个分支,再查看远程分支;
71a1ddef5fa0f211373c38991762a0473582b37d	HEAD
71a1ddef5fa0f211373c38991762a0473582b37d	refs/heads/dev
71a1ddef5fa0f211373c38991762a0473582b37d	refs/heads/master
[root@draft git2]# git branch
* master
[root@draft git2]# git branch dev    #创建对应的分支;
[root@draft git2]# git branch
  dev
* master
[root@draft git2]# git checkout dev
切换到分支 'dev'
[root@draft git2]# git branch
* dev
  master
[root@draft git2]# git pull    #与远程dev分支同步;
Warning: Permanently added the RSA host key for IP address '52.74.223.119' to the list of known hosts.
来自 github.com:tanyyinyu/git2
 * [新分支]          dev        -> origin/dev
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> dev

[root@draft git2]# ls
README.md
[root@draft git2]# echo "local dev change" >> 1.txt    #在dev分支新建一个文件;
[root@draft git2]# ls
1.txt  README.md
[root@draft git2]# git add 1.txt
[root@draft git2]# git commit -m "add txt"    #更新到仓库;
[dev 9afc2fc] add txt
 1 file changed, 1 insertion(+)
 create mode 100644 1.txt
[root@draft git2]# git checkout master     
切换到分支 'master'
[root@draft git2]# echo "local master change" >> 1.txt   #在master分支新建一个文件;
[root@draft git2]# git add 1.txt
[root@draft git2]# git commit -m "add txt"    #更新到仓库;
[master 87dca1d] add txt
 1 file changed, 1 insertion(+)
 create mode 100644 1.txt
[root@draft git2]# git push     #推送到远程;
warning: push.default 未设置,它的默认值将会在 Git 2.0 由 'matching'
修改为 'simple'。若要不再显示本信息并在其默认值改变后维持当前使用习惯,
进行如下设置:   #simple模式,推送本地远程都对应上的分支;

  git config --global push.default matching

若要不再显示本信息并从现在开始采用新的使用习惯,设置:

  git config --global push.default simple

参见 'git help config' 并查找 'push.default' 以获取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。如果您有时要使用老版本的 Git,
为保持兼容,请用 'current' 代替 'simple' 模式)

Counting objects: 7, done.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (6/6), 480 bytes | 0 bytes/s, done.
Total 6 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), done.
To [email protected]:tanyyinyu/git2.git
   71a1dde..9afc2fc  dev -> dev      #远程与本地分支对应,所有更新都会更新到远程;
   71a1dde..87dca1d  master -> master
[root@draft git2]# git branch dev2
[root@draft git2]# git checkout dev2
切换到分支 'dev2'
[root@draft git2]# cat 1.txt     #新建一个分支,目前是在master分支下,新建的分支跟master一样;
local master change
[root@draft git2]# git checkout dev
切换到分支 'dev'
[root@draft git2]# git branch dev3    
[root@draft git2]# git checkout dev3
切换到分支 'dev3'
[root@draft git2]# cat 1.txt       #在dev分支下再新建分支,内容跟dev分支一样;
local dev change
[root@draft git2]# git push     #本地分支比远程多,不会推到远程,远程没有相对应分支;
Everything up-to-date
[root@draft git2]# git push origin dev2    #通过此命令在远程新建对应分支,并同步内容;
Total 0 (delta 0), reused 0 (delta 0)
remote: 
remote: Create a pull request for 'dev2' on GitHub by visiting:
remote:      https://github.com/tanyyinyu/git2/pull/new/dev2
remote: 
To [email protected]:tanyyinyu/git2.git
 * [new branch]      dev2 -> dev2
[root@draft git2]# git ls-remote origin    #远程增加了分支dev2;
87dca1ddb09fe17b2392b94a463fc442e144dacd	HEAD
9afc2fcc9b10438c2188965adb1863596bf4a922	refs/heads/dev
87dca1ddb09fe17b2392b94a463fc442e144dacd	refs/heads/dev2
87dca1ddb09fe17b2392b94a463fc442e144dacd	refs/heads/master

标签管理

  • 标签类似于快照功能,可以给版本库打一个标签,记录某个时刻库的状态。也可以随时恢复到该状态。
  • git checkout master 先切到master分支上
  • git tag v1.0 给master打一个标签v1.0
  • git show v1.0 查看标签信息
  • git tag 可以查看所有的标签
  • tag是针对commit来打标签的,所以可以针对历史的commit来打tag
    git log --pretty=oneline --abbrev-commit //先查看历史的commit
    git tag v0.9 46d3c1a //针对历史commit打标签
    git tag -a v0.8 -m “tag just v1.1 and so on” 5aacaf4 //可以对标签进行描述
  • git tag -d v0.8 //删除标签
  • git push origin v1.0 //推送指定标签到远程
  • git push --tag origin //推送所有标签,不能删除远程标签;
  • 如果本地删除了一个标签,远程也想要删除需要这样操作:
    git tag v1.0 -d //删除本地标签
    git push origin :refs/tags/v1.0 //删除远程标签

git 别名

  • git commit 这个命令是不是有点长? 用别名可以提高我们的工作效率
git config --global alias.ci "commit -m"   
git config --global alias.co checkout   
git config --global alias.br branch
git config --global alias.a add
git config --global alias.ps push
git config --global alias.reset "reset --hard"
git config --global alias.mer "merge"
git config --global alias.ls "ls-remote origin"
  • 查看git别名使用命令
    git config --list |grep alias
  • 查询log小技巧: (带颜色格式)
    git config --global alias.lg “log --color --graph --pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ --abbrev-commit”
  • 取消别名
    git config --global --unset alias.br
别名修改保存在以下文件
[root@draft git2]# cat !$
cat /root/.gitconfig
[user]
	email = [email protected]
	name = Your Name
[alias]
	ci = commit -m
	lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
	reset = reset --hard
	ls = ls-remote origin
	br = branch

git服务器

  • github毕竟是公开的,而私有仓库又得花钱买。所以我们可以想办法搭建一个私有的,只自己公司使用的。Gitlab是个不错的选择。在介绍它之前,先讲述一下命令行的git服务器
  • 找一台服务器,首先要安装git,yum install git
  • 添加git用户,并且设置shell为/usr/bin/git-shell,目的是为了不让git用户远程登陆
  • useradd -s /usr/bin/git-shell git
  • cd /home/git
    创建authorized_keys文件,并更改属主、属组和权限,用来存客户端机器上的公钥
    mkdir .ssh
    touch .ssh/authorized_keys
    chown -R git.git .ssh
    chmod 600 .ssh/authorized_keys
  • 定好存储git仓库的目录,比如 /data/gitroot
  • mkdir /data/gitroot
  • cd /data/gitroot
  • git init --bare sample.git // 会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾
  • chown -R git.git sample.git
  • 以上操作是在git服务器上做的,平时git服务器是不需要开发人员登录修改代码的,它仅仅是充当着一个服务器的角色,就像github一样,平时操作都是在我们自己的pc上做的
  • 首先要把客户端上的公钥放到git服上/home/git/.ssh/authorized_keys文件里
  • 在客户端上(自己pc)克隆远程仓库
    git clone git@ip:/data/gitroot/sample.git
    此时就可以在当前目录下生成一个sample的目录,这个就是我们克隆的远程仓库了。进入到这里面,可以开发一些代码,然后push到远程。
git服务端创建用于git服务的帐号和登陆设置

[root@second git]# useradd -s /usr/bin/git-shell gitgit   #创建帐号,用于git服务,不能登陆系统;
[root@second git]# cd /home/gitgit/   #建立客户端的公钥文件;
[root@second gitgit]# mkdir .ssh
[root@second gitgit]# touch .ssh/authorized_keys
[root@second gitgit]# chmod 600 !$
chmod 600 .ssh/authorized_keys
[root@second gitgit]# vim !$
vim .ssh/authorized_keys
[root@second .ssh]# chown gitgit:gitgit authorized_keys  #重要;

git服务端建立空的可用于客户端上传的裸库
[root@second projects]# mkdir -p /data/gitroot  #git数据目录;
[root@second projects]# cd !$
cd /data/gitroot
[root@second gitroot]# git init --bare sample.git  #创建裸库;
初始化空的 Git 版本库于 /data/gitroot/sample.git/
[root@second gitroot]# chown -R gitgit:gitgit /data/gitroot  #重要;

git客户端操作
[root@draft .ssh]# ssh [email protected]  #测试ssh,以下为成功信息;
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to 192.168.87.150 closed.
[root@draft .ssh]# git clone [email protected]:/data/gitroot/sample.git
正克隆到 'sample'...
warning: 您似乎克隆了一个空版本库。
[root@draft ~]# cd sample/
[root@draft sample]# echo "test private git serve" >> 1.txt
[root@draft sample]# git add 1.txt
[root@draft sample]# git commit -m "new file"
[master(根提交) 70b767c] new file
 1 file changed, 1 insertion(+)
 create mode 100644 1.txt
[root@draft sample]# git push  #裸库没有分支内容,需要指定分支;
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: 无法推送一些引用到 '[email protected]:/data/gitroot/sample.git'
[root@draft sample]# git push origin master  #指定分支上传到服务器;
Counting objects: 6, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (6/6), 457 bytes | 0 bytes/s, done.
Total 6 (delta 0), reused 0 (delta 0)
To [email protected]:/data/gitroot/sample.git
 * [new branch]      master -> master
发布了125 篇原创文章 · 获赞 5 · 访问量 4610

猜你喜欢

转载自blog.csdn.net/tanyyinyu/article/details/103683044
今日推荐