版本控制-Git服務器搭建和經常使用命令使用

  Git是目前世界上最早進的分佈式版本控制系統(沒有之一)。使用Svn的請參考《版本控制-svn服務器搭建和經常使用命令(centos 6.3)》,下面介紹Git的經常使用命令html

經常使用命令git

  簡單版github

  升級版shell

  其餘vim

服務器搭建centos

  本地服務器搭建緩存

  Gitolite搭建安全

  


  1、簡單版bash

  一、建立版本庫服務器

git init

  二、新增修改,新增文件到緩存區

git add

  三、比較文件的差別

git diff

  四、查看倉庫狀態

git status

  五、從緩存區提交修改(新增)到版本庫

git commit -m 'add a.txt'

  六、查看提交日誌

git log (--pretty=oneline)

  七、HEAD表示當前版本,HEAD^表示上個版本,HEAD^^上上個版本,HEAD~100表示網上100個版本

  八、更新到指定版本(沒有撤銷本地修改)

git reset --hard HEAD^
git reset --hard 3628164  # 能區分一個版本的commit id便可

  九、查看每一次命令

git reflog

  十、撤銷工做區的修改

git checkout --file  

假設錯誤修改readme.txt,而且git add到了緩存區

git reset HEAD readme.txt   # 回到最新版本,撤銷緩存區的修改
git checkout --readme.txt   #  撤銷本地修改

  十一、刪除文件

刪除本地文件直接rm

刪除版本庫文件

git rm a.txt 
git commit -m‘rm a.txt’

刪除暫存區文件

git rm --cache a.txt

git checkout HEAD(a.txt)  # 會清除工做區和暫存區的修改

  2、升級版

  一、從github添加遠程倉庫(origin是遠程庫默認名稱,能夠更改)

git remote add origin git@github.com:***/learngit.git

  二、把本地的全部修改推送到遠程庫(push是用本地的master分支,-u是表示第一次將遠程庫的master和本地的master關聯)

git push (-u) origin master

  三、克隆一個倉庫(支持ssh和https協議,ssh原生且最快)

git clone git@github.com:***/gitskills.git

  四、建立一個分支並切換到該分支git鼓勵使用分支)

git checkout -b dev

等於兩個命令

git branch dev
git checkout dev

  五、分支命令

查看分支:git branch
建立分支:git branch <name>
切換分支:git checkout <name>
建立+切換分支:git checkout -b <name>
合併某分支到當前分支:git merge <name>
刪除分支:git branch –d(D) <name>
刪除遠程分支:git push origin :serverfix

  六、查看分支合併狀況日誌

git log –graph

git log --graph --pretty=oneline --abbrev-commit

  七、分支管理策略

master是穩定版本,開發的在其餘分支上,穩定後合併到master。

合併分支時,加上--no-ff參數就能夠用普通模式合併,合併後的歷史有分支,能看出來曾經作過合併,而fast forward(默認)合併就看不出來曾經作過合併

git merge --no-ff -m "merge with no-ff" dev
git log --graph --pretty=oneline --abbrev-commit

  八、掛起工做場景

git stash    # 掛起
git stash list   # 查看

git stash pop  # 恢復並刪除
等於 
git stash apply && git stash drop

  九、多人協做

用下面命令推送本身的修改

git push origin branch-name

若是推送失敗,則由於遠程分支比你的本地更新,須要先用 git pull 試圖合併;若是合併有衝突,則解決衝突,並在本地提交;沒有衝突或者解決掉衝突後,再用下面命令推送就能成功

git push origin branch-name

若是git pull提示「no tracking information」,則說明本地分支和遠程分支的連接關係沒有建立,用命令

git branch --set-upstream branch-name origin/branch-name

  十、標籤操做

git tag <name>    # 新建標籤,默認爲HEAD,能夠指定commit id
git tag -a <tagname> -m "blablabla..."    # 指定標籤信息
git tag -s <tagname> -m "blablabla..."    # 用PGP簽名標籤名
git tag # 查看全部標籤
git show <tagname> # 看到說明
git tag -d <tagname> # 本地刪除標籤
git push origin <tagname> # 推送標籤到遠程倉庫
git push origin --tags # 一次性推送全部標籤到遠程倉庫

PGP簽名的標籤是不可僞造的,由於能夠驗證PGP簽名。驗證簽名的方法比較複雜

要刪除遠程倉庫的標籤須要使用

git tag -d <tagname>
git push origin :refs/tags/<tagname>

  3、其餘

  1、忽略文件

Git工做區的根目錄下建立一個特殊的.gitignore文件,而後把要忽略的文件名填進去,Git就會自動忽略這些文件。咱們並不須要從頭寫.gitignore文件,GitHub已經爲咱們準備了各類配置文件,只須要組合一下就可使用了。全部配置文件能夠直接在線瀏覽:https://github.com/github/gitignore

  二、配置別名

git config --global alias.co checkout
git config --global alias.ci commit
git config --global alias.br branch

每一個倉庫的Git配置文件都放在.git/config文件中

  4、搭建本地Git服務器

詳情可參考廖雪峯官方網站 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

  一、安裝git

yum install git -y

[root@master git]# git version
git version 1.7.1

  二、新建git帳號

[root@master git]# useradd git

[root@master git]# passwd git

[root@master git]# mkdir /data1/git

  三、生成ssh key

[root@master git]# su - git

[git@master ~]$ ssh-keygen -t rsa

[git@master .ssh]$ cd ~/.ssh/

[git@master .ssh]$ touch authorized_keys

[git@master .ssh]$ chmod 600 authorized_keys 

收集全部須要登陸的用戶的公鑰,就是他們本身的id_rsa.pub文件,把全部公鑰導入到/home/git/.ssh/authorized_keys文件裏,一行一個。  

  四、初始化git倉庫

切回Root帳戶

[root@master ~]# cd /data1/git/

[root@master git]# git init --bare project.git
Initialized empty Git repository in /data1/git/project.git/

[root@master git]# chown -R git: /data1/git/

  五、禁用shell登錄

處於安全考慮通常禁用git帳戶被遠程登錄shell。修改/etc/passwd

[root@master git]# vim /etc/passwd

將 git:x:502:502::/home/git:/bin/bash  修改成
git:x:502:502::/home/git:/usr/bin/git-shell
[root@master git]# su - git
fatal: What do you think I am? A shell?

  六、其餘地方克隆倉庫

現將公鑰添加到 authorized_keys文件中

git clone ssh://git@master:322/data1/git/project.git

管理公鑰可使用 Gitosis ,由於authorized_keys文件大了很難管理。管理權限請參考下面

  5、Gitolite搭建教程

參考官網 https://git-scm.com/book/zh/v1/服務器上的-Git-Gitolite

  一、前期準備

git服務器git@10.16.4.14,git admin機器git@10.16.4.15

root@10.16.4.14$ useradd git
root@10.16.4.14$ passwd git
root@10.16.4.14$ su - git

admin git@10.16.4.15
root@10.16.4.15$ useradd git
root@10.16.4.15$ passwd git
root@10.16.4.15$ su - git
root@10.16.4.15$ ssh-keygen -t -P ''

send git.pub to git@10.16.4.14:322/home

  二、Admin使用

git clone

git@10.16.4.15 git clone ssh://git@10.16.4.14:322/gitolite-admin

add user

1)獲取用戶的public ssh key,例如test@10.1.32.164.pub
2)將`1`的pub存放到git@10.16.4.15 /home/git/gitolite-admin/keydir 文件夾下
3)修改/home/git/gitolite-admin/conf/gitolite.conf,賦予`1`用戶的倉庫權限
4)git add && git commit -m 'add user test...' && git push origin master
5)登錄test@10.1.32.164,git clone `3`中的倉庫

  三、權限控制

參考 https://git-scm.com/book/zh/v1/服務器上的-Git-Gitolite

參考 http://perthcharles.github.io/2015/08/24/setup-gitolite-service-git-1

  四、解決密碼過時問題

[git@Dev_10_16_4_15 gitolite-admin]$ git push origin master 
WARNING: Your password has expired.
Password change required but no TTY available.
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

解決命令

[root@Dev_10_16_4_14 ~]# chage -M 999 git

 

原創文章,轉載請備註原文地址 http://www.cnblogs.com/lxmhhy/p/6038243.html

相關文章
相關標籤/搜索