開源中國(oschina)的Git托管


一些廢話

對於使用CVS/SVN出身的人來說,Git始終有點難上手(比如我),因為概念較多,一時理不清,盡管網上已經有很多教程,其實后來我發現,要掌握它的辦法就是使用它,着手開始用它做源碼管理,有問題就解決問題,見招拆招,這樣就成了。

本文並非將Git怎么用的,如果對Git缺乏基本的了解,那這里有一個不錯的教程:Git教程

大家都知道,Git是分布式的,如果僅僅只有一個本地庫的話,一來不利於協同工作,二來也不夠保險,萬一本地硬盤壞了呢?所以即便是一個人在做開發,也最好找一個遠程的代碼庫來托管。可以選擇自己架一個,但稍微有些麻煩,並且由於沒有公網固定ip地址,只能在局域網里用用,一旦在家辦公就不輕易能檢出代碼;另一個選擇就是用現有的代碼托管服務,最最著名的無疑是github.com,但github.com只能免費創建公共容器,也就是說所有人都能看到的容器,如果要創建私有容器只允許自己的人看到的話,要付點錢,雖然也不算貴,現在不是有種觀點能用錢解決的就不要花時間么?但由於一些眾所周知的原因,github.com在大陸訪問是不是會出現些不穩定的情況。那國內有沒有類似github.com這樣的代碼托管服務呢?答案是肯定的,開源中國提供的就很不錯:git.oschina.net,而且,即便是創建私有容器,它也是免費的,太棒了,我目前用下來大致上OK,有時候會稍微有點卡,但都可以接受。

一點原理說明

Git的身份驗證方式和SVN有些不同,SVN可以使用自帶的SVN協議和簡單的用戶名/密碼機制驗證用戶身份,而Git則可使用httpsssh的連接方式,加系統用戶名/密碼驗證,或者通過在服務器端保存用戶公鑰的方式來驗證用戶身份。很明顯,oschina的做法是在服務器端保存用戶公鑰這種方式,因為不可能給成千上萬的用戶都創建系統帳號。服務器端一旦有了用戶的公鑰,就可以驗證用戶身份了,(能用這個公鑰解開的密文,一定是用對應的私鑰加密的,誰有對應的私鑰,當然是對應的用戶了)所以我們要做的是將我們的公鑰上傳到服務器上去,這樣服務器就認我們了,根本不再需要額外的用戶名/密碼。我們下面也將采用ssh的方式來使用遠程Git服務。

ssh的首次連接

這里還稍微有點點小問題要說明一下的,https協議通常是使用一些權威機構頒發的證書,你去訪問https的時候就能夠通過證書來確認這些網站的身份是可信的,而ssh則通常使用自己生成的證書,你怎么確定你要鏈接的那個服務器的身份呢?如果那個服務器是個假冒服務器,那怎么辦?所以第一次用ssh連接遠程服務器的時候,會給出類似的提示:

這是Windows環境下使用的SSH Secure Shell客戶端的提示,在*nix下大致如此:

提示會給出遠程主機公鑰的指紋來讓你確定其真實身份(因為公鑰很長,很難用肉眼比對,所以做了個指紋摘要供用戶查看),如果確定,就點“Yes”,在*nix環境下,會將這個公鑰信息保存到~/.ssh/known_hosts文件中,下次就無需再詢問你了,下面第一次連接遠端服務的時候若是出現類似的確認,就不要感到奇怪了。

注冊與創建項目

好,前面只是提提原理,以便大家理解,下面言歸正傳,講講如何用oschinagit托管服務。

第一步當然是先注冊,到“http://git.oschina.net/”去,然后……注冊過程很簡單,不用說,你提供的email就相當於是你的用戶名了。

注冊完登錄。然后就可以創建自己的項目了,項目就相當於容器,比如我創建了一個容器叫git_test

這個時候也先別急着把你的本地容器push上來,你還沒上傳你的公鑰呢,對吧?

生成和配置公私鑰

要上傳公鑰,得先做一對公私鑰,否則上傳什么?使用ssh-keygen來做這個事情。(Windows的話先弄個cygwin

打開:“https://git.oschina.net/keys”,點添加公鑰,標題隨便輸,我習慣性地寫自己電腦的名字,比如“guogangj’s Mac”,公鑰的內容可以這樣獲取到:“cat ~/.ssh/id_rsa.pub”。把內容完整填入文本框中即可,注意不要隨意在中間添加換行回車空格啥的。

保存,輸入密碼確定,這樣就把公鑰存到服務器上去了。順便說一下,如果你想知道這個公鑰的指紋的話,可以這樣:

這樣服務器端的配置就算完成了,測試一下:

若出現了一些意外的話,可以參考一下這個:可能的解決方案

Git的配置

本文當然不會告訴你具體怎么去使用Git,但在正常pushpull之前,我們還是有些東西要配置一下的。下面是配置用戶名和email,這是全局配置的,不只是對一個Git容器生效,配置會被保存在“~/.gitconfig”中。

$git config --global user.name "guogangj"

$git config --global user.email "guogangj@163.com"

另外還可以配置一下要忽略的文件的列表,有些文件不必加入到Git中嘛,比如生成的.o文件,一些用戶相關的配置啥的,以XCode為例,可以生成這么一個文件“~/.gitignore”,內容如下:

#Exclude the build directory
build/*

#Exclude temp nibs and swap files
*~.nib
*.swp

#Exclude OS X folder attributes
.DS_Store

#Exclude user-specific XCode files
*.xcworkspace
xcuserdata

再設置一下:

git config --global core.excludesfile=~/.gitignore

配置完成。使用起來還是非常簡單的,clone的方法:

$git clone git@git.oschina.net:guogangj/git_test.git

“git@git.oschina.net:guogangj/git_test.git”這個地址可以在項目主界面上得知:

完了之后可以看看remote的選項:

$git remote -v

這樣就可以輕易的pull和push了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM