前言:今天剛剛把開發環境配好,真是興奮,開啟Git——clone 修改了代碼 pull push 好像檔案沒有更新成功,頁面沒有變化,囧了,然後我就不停在那邊Pull來Pull去,Push來Push去,結果還是沒有解決問題。終於我發現使用Git管理圖片和代碼真的是完全不一樣,管理圖片會3個就行了,Clone\Pull\Push,但是代碼好像沒那麼簡單。
在園子裡找了一些資料,整理下。
Git的缺點:漏洞百出的抽象
Git 包含太多不是抽象的抽象,在定義使用者介面和實現上經常沒有任何區別,這是可以理解的,對一個進階使用者來說他需要瞭解一些功能的具體實現,以掌握各個命令的 微妙之處。但大量的內部細節對初學者來說簡直是噩夢。有這麼一個說法,關於水暖器材和瓷器,但你必須成為一個水暖工才能知道器材如何安裝在瓷器上。
很多人對我的抱怨予以回應說:你無需使用所有的命令,你可以向 Subversion 一樣來使用 Git。這是狡辯,就好比是告訴一個老奶奶說高速公路並不可怕,她可以在高速路上靠左邊的快車道上以時速 20 公裡爬行,一樣的道理。Git 並沒有提供任何有用的子集,每個命令都會連帶著對其他命令的要求,很簡單的動作經常需要很複雜的動作來撤銷或者改進。
下面是一個 GitHub 項目維護者的一些善意的建議:
1. 在分支和 master 上尋找合并的基準: ‘git merge-base master yourbranch’
2. 假設你已經提交了更改記錄,從對你的提交重新基準化到合并准,然後建立一個新分支
3. git rebase –onto <basecommit> HEAD~1 HEAD
4. git checkout -b my-new-branch
5. 檢出你的 ruggedisation 分支,然後移除提交: ‘git reset –hard HEAD~1′
6. 合并新的分支到 ruggedisation: ‘git merge my-new-branch’
7. 檢出 master (‘git checkout master’), 合并新分支 (‘git merge my-new-branch’), 然後檢查合并後的情況,接著移除合并 (‘git reset –hard HEAD~1′).
8. 提交新的分支 (‘git push origin my-new-branch’) 並記錄 pull 請求
翻譯:“奶奶,在高速公路上開車很容易的。鬆開離合器,讓轉速超過 6000 轉使車輪打滑,然後進入第一個彎道並上高速公路,看路牌到出口前,使用手刹飄逸轉向出口。
Git的缺點:簡單任務也要諸多命令
如果你在開發一個開源項目,你做了一些改變,然後想與其他人分享,你只需要:
1. 修改代碼
2. 執行 svn commit
如果你增加了一些新檔案:
1. 添加檔案
2. svn add
3. svn commit
如果你的項目託管在 Github 類的網站中,那麼你需要:
1. Make some changes
2. git add [not to be confused with svn add]
3. git commit
4. git push
5. 到此為止,你的更改只完成了一半,接下來你需要登入到 Github,尋找你的提交,然後發布一個 “pull request” ,這樣其他人才可以擷取你的改動
在現實中,Github 的維護者希望你的改動是功能方面的分支,他們會要求你這樣操作:
1. git checkout master [to make sure each new feature starts from the baseline]
2. git checkout -b newfeature
3. Make some changes
4. git add [not to be confused with svn add]
5. git commit
6. git push
7. 然後登入到 Github,切換到你的新特性分支,發布 “pull request”
為了將你的更改從你的本地目錄中移到實際的項目資產庫,你需要:add, commit, push, “click pull request”, pull, merge, push.
下面是一個流程圖向你展示一個典型的開發人員在 Subversion 上要做的工作:
“Bread and butter” 是與遠程 SVN 資料庫操作的命令和概念。
然後我們再來看看如果你的項目託管在 Github 上會是怎樣的:
如果 Git 的強大之處是分支和合并,那麼它的弱點就是讓簡單的任務變得非常複雜。
翻譯版:我痛恨Git 的 10 個理由 英文版: 10 things I hate about Git)
其他分享資料
- 阮一峰:Git分支管理原則
- GIT和SVN之間的五個基本區別
- 理解Git的工作流程
- 更多Git相關新聞
- Git使用說明圖片版本,點擊查看大圖(圖片來源網路)