Linux構建Git代碼倉庫與自動部署

git

Git是用於Linux內核開發的版本控制工具。與CVS、Subversion一類的集中式版本控制工具不一樣,它採用了分佈式版本庫的做法,不須要服務器端軟件,就能夠運做版本控制,使得源代碼的發佈和交流極其方便。Git的速度很快,這對於諸如Linux內核這樣的大項目來講天然很重要。git最爲出色的是它的合併追蹤(merge tracing)能力。html

維基上關於git的解釋,連接:https://zh.wikipedia.org/wiki/Gitgit

構建Git倉庫的方式便可以在本地直接生成,也能夠本身搭建一個Git服務器,本文介紹在Linux服務器上如何構建一個Git代碼倉庫。Let's Start!vim

Git server

  1. 建立一個git用戶(專門的git用戶用於git鏈接,限制只能處理代碼等操做)
$ adduser git
複製代碼
  1. opt目錄下建立一個文件夾code
$ mkdir /opt/code
複製代碼
  1. 進入文件夾後建立一個git空倉
$ cd code
    $ git init --bare test.git
複製代碼
  1. 查看git倉庫目錄結構
$ cd test.git
複製代碼

目錄

  • HEAD:指示目前被檢出的分支
  • config:包含項目特有的配置選項
  • description:僅供 GitWeb 程序使用
  • hooks:包含客戶端或服務端的鉤子腳本(hook scripts)
  • info:包含一個全局性排除(global exclude)文件,用以放置那些不但願被記錄在 .gitignore 文件中的忽略模式(ignored patterns)
  • objects:存儲全部數據內容
  • refs:存儲指向數據(分支)的提交對象的指針

自動部署函數

進入hooks中建立一個函數(當接收傳送時自動調用的鉤子),實現當代碼更新時服務端運行代碼同步更新(此步驟僅做自動化部署方案參考,實際運行環境應根據需求後使用)。bash

$ cd hooks
    $ vim post-receive
複製代碼

內容爲重寫指定工做區文件,代碼以下服務器

#!/bin/bash
git --work-tree=/www/wwwroot/test checkout -f
複製代碼

實際狀況應將‘/www/wwwroot/test’替換爲目標項目位置,此目錄git用戶需有權限併發

chown -R git:root /www/wwwroot/test
複製代碼

最後給post-receive文件執行權限分佈式

chmod +x post-receive
複製代碼

具體鉤子建立與否需根據項目具體實現作不一樣的調整,某些大廠的代碼管理是用專門的服務器進行管理,在網頁控制分支合併發佈,一鍵部署等,抽象出版本管理這層,以便代碼的發佈,不知道你們都是怎麼實現版本迭代,分支管理的呢?(若是仍是手動搬運代碼就能夠試着實現本身的自動化部署啦~)svn

Git client

  1. 將存儲庫(將IP替換爲倉庫ip地址)克隆到新目錄(可用git BASH客戶端使用),也可直接在服務器上使用,輸入git clone /opt/code/test.git
$ git clone git@IP:/opt/code/test.git
複製代碼
  1. 進入新建立的目錄中,接着建立測試文件,代碼以下
$ cd test
    $ touch index.html
複製代碼
  1. 上傳到倉庫中,代碼以下
$ git add .
    $ git commit -m 'create index.html'
    $ git push
複製代碼
  1. 進入以前指定的工做區文件夾查看代碼是否提交成功,或經過重複步驟一克隆一份新代碼,若測試文件存在則成功。

如發生錯誤,有的多是由於用戶權限的緣由,經過chmod命令配置權限給git用戶便可函數

後記

現現在代碼管理已發展了諸多工具(如svn,cvs),代碼託管平臺(如Github,Gitlab)可供選擇,要說的話,代碼如同貨物,適合的版本管理如同高度自動化的船舶,僅需少數船員,便可駕駛着輪船穩健駛向新航線,提升效率,迎接新世紀。工具

\(•ㅂ•)/♥ 共勉~