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

来源:http://www.cnblogs.com/lxmhhy/archive/2016/11/07/6038243.html
-Advertisement-
Play Games

Git是目前世界上最先進的分散式版本控制系統(沒有之一)。使用Svn的請參考《版本控制-svn伺服器搭建和常用命令(centos 6.3)》,下麵介紹Git的常用命令 常用命令 簡單版 升級版 其他 伺服器搭建 本地伺服器搭建 Gitolite搭建 一、簡單版 1、創建版本庫 2、新增修改,新增文件 ...


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

常用命令

  簡單版

  升級版

  其他

伺服器搭建

  本地伺服器搭建

  Gitolite搭建

  


  一、簡單版

  1、創建版本庫

git init

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

git add

  3、比較文件的差異

git diff

  4、查看倉庫狀態

git status

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

git commit -m 'add a.txt'

  6、查看提交日誌

git log (--pretty=oneline)

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

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

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

  9、查看每一次命令

git reflog

  10、撤銷工作區的修改

git checkout --file  

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

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

  11、刪除文件

刪除本地文件直接rm

刪除版本庫文件

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

刪除暫存區文件

git rm --cache a.txt

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

  二、升級版

  1、從github添加遠程倉庫(origin是遠程庫預設名稱,可以更改)

git remote add origin [email protected]:***/learngit.git

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

git push (-u) origin master

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

git clone [email protected]:***/gitskills.git

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

git checkout -b dev

等於兩個命令

git branch dev
git checkout dev

  5、分支命令

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

  6、查看分支合併情況日誌

git log –graph

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

  7、分支管理策略

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

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

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

  8、掛起工作場景

git stash    # 掛起
git stash list   # 查看

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

  9、多人協作

用下麵命令推送自己的修改

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

  10、標簽操作

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>

  三、其他

  1、忽略文件

Git工作區的根目錄下創建一個特殊的.gitignore文件,然後把要忽略的文件名填進去,Git就會自動忽略這些文件。我們並不需要從頭寫.gitignore文件,GitHub已經為我們準備了各種配置文件,只需要組合一下就可以使用了。所有配置文件可以直接線上瀏覽:https://github.com/github/gitignore

  2、配置別名

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

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

  四、搭建本地Git伺服器

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

  1、安裝git

yum install git -y

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

  2、新建git賬號

[root@master git]# useradd git

[root@master git]# passwd git

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

  3、生成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文件里,一行一個。  

  4、初始化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/

  5、禁用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?

  6、其他地方克隆倉庫

現將公鑰添加到 authorized_keys文件中

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

管理公鑰可以使用 Gitosis ,因為authorized_keys文件大了很難管理。管理許可權請參考下麵

  五、Gitolite搭建教程

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

  1、前期準備

git伺服器[email protected],git admin機器[email protected]

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 [email protected]:322/home

  2、Admin使用

git clone

git@10.16.4.15 git clone ssh://[email protected]:322/gitolite-admin

add user

1)獲取用戶的public ssh key,例如[email protected]
2)將`1`的pub存放到[email protected] /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)登陸[email protected],git clone `3`中的倉庫

  3、許可權控制

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

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

  4、解決密碼過期問題

[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

知識交流討論請加qq群:180214441。謝謝合作

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Kali Linux 秘籍 原書:Kali Linux Cookbook 譯者:飛龍 線上閱讀 PDF格式 EPUB格式 MOBI格式 Github Git@OSC 線上閱讀 PDF格式 EPUB格式 MOBI格式 Github Git@OSC 目錄: 第一章 安裝和啟動Kali 第二章 定製 Ka ...
  • 學習Linxu以來,一直堅持編譯方式安裝軟體包,貌似圈子裡面也是都傾向於編譯,可是搜索到的編譯方法都是一堆複製粘貼來的指令, 每個人都這麼編譯, 卻幾乎沒有人去寫明那些五花八門的編譯指令代表了什麼,是否適合自己的系統!參加工作後,覺得系統提供的PHP版本預設安裝就是挺好的,簡單明瞭,不需要在依賴包方 ...
  • CentOS下安裝FTP伺服器: 第一步,檢查伺服器端是否已經安裝FTP:[root@localhost centos]# rpm -q vsftpd 如果出現的是:[root@localhost centos]# package vsftpd is not installed ,說明vsftpd沒 ...
  • 1.IOS中XML文件獲取 //設置遠程訪問地址 NSURL *url=[NSURL URLWithString:@""]; //創建動態URL請求,並初始化 NSMutableURLRequest * request=[[NSMutableURLRequest alloc]initWithURL: ...
  • 1、安裝MySql服務端命令: yum install mysql-server yum install mysql-devel 2、安裝MySql客戶端 yum install mysql 3、啟動服務 service mysqld start或者/etc/init.d/mysqld start ...
  • XML文件有2種解析方式 1.基於文檔(document) 2.基於事件(sax) 1.IOS中XML文件獲取 首先要將XML導入工程中 在ViewController的按鈕事件中,代碼如下: //獲取xml完整路徑 NSString * path=[[NSBundle mainBundle] pa ...
  • 圖1. STM32F10xxx標準外設庫體繫結構先說這個問題,大家都知道,我們在選擇使用哪些外圍的的時候,是去更改從官方模版中拷貝過來的stm32f10x_conf.h文件的27-48行,把我們要用的外圍的頭文件包含進來,不用的外圍的頭文件註釋掉,但是你是否發現我們根本沒有在用戶主程式文件中包含st ...
  • 安裝vim 命令 一般模式 shift 4 行尾 shift 6 或 0行首 gg 頂部 G 下部 複製 yy 剪切幾行 數字 dd p粘貼 /和? 查找 1,100s/iptable/ip/g 第一行到100行 把iptable替換成ip g全局 1,$s/iptable/ip/g 全部選擇 %s ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...