裸版本庫就是不含有工做區的版本庫,而咱們日常開發的代碼庫都是開發版本庫,修改工做區,而後進行提交、推送提交等操做。
可使用git init --bare命令建立一個裸版本庫。裸版本庫通常做爲服務器上的版本庫。git
引用空間把遠程分支版本庫中的分支名映射到本地版本庫中的分支名。其語法爲:
[+]source:dest若是有加號則表示不會在傳輸過程當中進行正常的快進安全檢查。安全
操做 | 源 | 目標 |
---|---|---|
fetch | 抓取的遠程引用 | 更新的本地引用 |
push | 推進的本地引用 | 更新的遠程引用 |
好比git fetch命令會使用refspec:+refs/heads/:refs/remotes/origin/。其定義在.git/config文件中服務器
git使用URL來定位遠程版本庫,支持多種url協議,常見的有http、https、git、ssh、file。ssh
clone命令能夠把遠程的代碼庫克隆到本地,並在.git/config目錄中記錄遠程版本庫的url。.git/config文件以下:ide
[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true [remote "origin"] url = D:/source-code/temp/server fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master [branch "develop"] remote = origin merge = refs/heads/develop
注意[remote "origin"] url = D:/source-code/temp/server,其中origin是對url的一個別名,由於一個git庫可能對應多個遠程代碼庫(例如使用git remote add命令添加其餘遠程代碼庫,git協同模型的子樹合併),若是沒有這個別名,每次都填寫這個長長的url會很麻煩,因此這個別名是必須的,並且clone的時候,別名默認爲「origin」。fetch
remote命令用於管理遠程版本庫url
$git remote add daf_remote http://xxxx/*.git --------添加daf_remote爲別名的url,此時會看到.git/config文件變動 $git remote rename <old> <new> -----重命名別名 $git remote remove <name> ------移除某個遠程代碼庫 $git remote -v show ------移除某個遠程代碼庫
pull=fetch+merge。當咱們執行git pull命令實際上會首先執行fetch抓取命令,而後把當前分支和抓取的SHA1合併。
而當咱們執行git pull命令的時候,git是如何知道拉取和合並的呢?spa
當咱們執行git pull origin develop(:develop)的時候,一樣和git pull相同,由於具體執行的時候,git fetch會補齊遠程倉庫和完整的refspaccode
push命令是和fetch命令是一個相反的命令,其refspac通常爲refs/heads/${branchNam}:refs/heads/${branchNam}。表示源爲本地refs/heads/${branchNam}的引用,目標爲遠程倉庫refs/heads/${branchNam}的引用。orm