git 是非常流行的分布式版本控制工具,很早以前就從 subversion 轉到 git 了。現在每天用的 xcode 日常開發,測試和應用部署也都是使用 git,而且除了版本控制功能之外,也可以使用 git 很方便的進行應用部署(或**發布)等工作,所以 git 基本上是每天工作都離不開的乙個工具了。
之前一直在使用 github 上付費 git 託管服務,雖然 github 的**託管,協作,wiki 功能,以及 issue tracking 功能都非常好用。但是隨著專案不斷增多,github 最便宜的每月 7 美元 5 個 private 專案的容量很快不夠用了。想想反正自己有一台 linode 的 centos 雲伺服器,於是誕生了自己架一套 git 服務的念頭,就不花錢公升級 github 了。
根據 git 官方** pro git 書中的說明,選擇使用 ssh 方式簡單地架設了一套。為什麼選擇使用 ssh 方式,因為主要是自己使用,不存在提供給別人公共訪問的要求,而且基本每台 linux 伺服器都可以 ssh。pro git 中對 git 可以採用的幾種協議的優缺點以及適用場景都有詳細介紹。下面是使用 ssh 方式的基本步驟:
目錄 [隱藏]
要通過 ssh 轉殖乙個 git 版本庫,我們可以像下面這樣指定 ssh:// url :
$ git clone ssh:或者我們也可以不指定乙個協議 — 如果沒有顯式指定的話, git 假設是 ssh:
$ git clone user@server:project.git我們也可以不指定乙個使用者,這樣的話 git 會假設使用的是本地當前登入的使用者(和使用 ssh 命令的情形類似)。
下面我們來看一下架設乙個自己的 git 服務需要的幾個步驟,假設我們要把乙個現有的專案變成能夠通過 git 在伺服器上進行管理的專案。
假設 my_project 是我們在本地的乙個 git 版本庫專案目錄,通過使用--bare
引數可以生成 git 裸版本庫
$ git clone --bare my_project my_project.git也可以不指定後面的
my_project.git
引數,git 缺省會使用同樣的名字。
如果我們的 my_project 目錄還沒有被初始化為乙個 git 版本庫專案目錄,需要首先進入該目錄,初始化 git,然後把現有的檔案新增到版本庫。
cd my_project然後再退出該目錄,繼續執行上面的git init
git add .
git commit -m "初始化版本庫"
git clone ...
命令。
現在我們已經有了乙個裸版本庫,下一步就是把它放到伺服器上。假設我們已經有了乙個名為git.example.com
的伺服器,並且已經可以通過 ssh 進行訪問。同時假設我們也在伺服器的/opt
目錄下建了乙個名為git
的目錄專門用來存放 git 版本庫。我們就可以像下面這樣通過拷貝乙個裸版本庫到伺服器上來設定乙個新的版本庫:
$ scp -r my_project.git [email protected]:/opt/git需要注意的是,如果我們給 ssh 設定了不同的訪問埠(不是預設的 22),比如說是8080,那麼我們需要用
-p 8080
引數來指定 ssh 使用的埠。
$ scp -r -p 8080 my_project.git [email protected]:/opt/git同時還要注意
scp
使用的使用者要具有對/opt/git
目錄的寫入許可權。
這時候,其他也具有到同一臺伺服器 ssh 訪問許可權的使用者就可以通過執行下面的命令來轉殖我們剛剛上傳的專案啦,要求至少對/opt/git
目錄具有讀取許可權:
$ git clone [email protected]:/opt/git/my_project.git這裡同樣要注意 ssh 埠的問題,如果不是預設的 ssh 埠,要像下面這樣執行命令(注意沒有省略 ssh://,以及 8080 埠號放置的位置)
$ git clone ssh:剩下的就是和通常 git 的用法一樣了,
git pull
git push
等
例如:
$ git pull ssh:希望通過 ssh 之外的其他方式來架設 git,或者像提供 git 的公共訪問或是希望提供 web 頁面的,更多資訊請參考 git 官方**上的文章:git on the server
如果希望更方便地對本地專案進行 push,可以使用git remote add
命令增加乙個我們剛剛建立的遠端版本庫的名字,以後想要 push 的時候直接執行git push
即可,不需要再輸入完整的 url 路徑了。例如:
git remote add my_project ssh:建立乙個 tag:git push my_project
git tag -a v0.1 -m '你的註解',其中 「v0.1″ 就是 tag 的名字。要注意的是
git push
並不會把 tag push 到伺服器版本庫中。要使用:
git push my_project master v0.1這樣的命令,其中 master 是本地分支的名稱,v0.1 是本地的 tagname。具體請參考:git – tagging
配置乙個高效快速的Git環境
可以直接修改 gitconfig檔案,也可以用命令配置乙個可以實際使用的高效的git環境。這兩項是必須的。git config global user.name gituser git config global user.email email git.comor user name gituse...
ssh 的乙個坑
今天我碰到 fabric 和 ssh 的乙個坑,記錄下來,供以後開發時參考,相信對其他人也有用。今天用 ssh 登入遠端伺服器用不了 npm,查了下,發現原因是 ssh登入時不會載入 bashrc 而是載入 bash profile,所以以ssh的預設登入不會是 bash 需要在 bash prof...
使用Docker建立乙個ssh連線的容器
使用dockerfile建立乙個配置好sshd的映象 建立工作目錄 mkdir sshd centos cd sshd centos touch dockerfile run.sh 編寫run.sh指令碼和authorized keys 檔案 run.sh內容 此處會產生問題,詳情見文章最後的文字敘...