# 版本控制
文本編輯器很好地解決了碼字的問題,于是另一個問題來了——在一個項目的開發過程中需要和很多人一起合作,而且隨著時間的推進代碼會產生多個不同的版本。比較直觀的想法是用文件名重命名的方式管理,如`file0.c, file1.c...`, 稍微好點的會用`file-2014-10-05.c...` 這種版本管理方式對于稍微有點規模的項目來說就顯得有點太naive了,再說自己改著也蛋疼乳酸是不是?聰明的程序員早已為你想好了解決辦法——Version Control(版本控制)! 專業的事情就應該交給專業的工具去解決。于是另一個問題又來了——**版本控制工具那么多,到底哪家強?藍翔貌似沒有版本控制工具啊...** 隨便一搜就能發現以下幾種:
1. [Git](http://zh.wikipedia.org/wiki/Git)
1. [Subversion](http://zh.wikipedia.org/wiki/Subversion)
1. [Mercurial](http://zh.wikipedia.org/wiki/Mercurial)
整體來講,版本控制可以分為兩種,分布式的和非分布式的 ←_← 非分布式的可以理解為集中式的,也就是說在使用時必須有一個集中式的服務器。就像軍訓訓練時出隊必須向排長報告,這個排長就相當于集中式版本控制工具中的服務器啦。你想啊,你做什么都需要向排長報告,自然是相當不爽對不對π_π 其中的代表就是Subversion啦。
如果這個版本控制的服務器離你十萬八千里,而這時恰好某位熊孩紙有事沒事拔掉你的網線,摁下路由器的開關——總之就是不能讓你不能愉快的連接國外的服務器就是了,那么這個時候團隊合作自然是無法愉快地進行下去了。既然和集中式版本控制做不成朋友,那就讓我們和土豪分布式版本控制工具做朋友吧!棄Subversion,保平安~
就連Subversion本身的開發也已于2014年愚人節轉向使用git,噗哈哈哈,投票最后竟然通過了... [[svn1]](#)[[svn2]](#)[[svn3]](#)
### 分布式版本控制工具 - git
分布式的好處在于,它可以不像集中式版本控制工具那樣依賴中心服務器,開發完全可以在本地進行,不依賴網絡。其中的代表就是[Git](http://zh.wikipedia.org/wiki/Git)啦。Git是 Linus Torvalds 繼 Linux 之后給全人類帶來的另一大神器,騷年顫抖吧!先放一張git在分支和合并方面的大殺器特性給大家醒醒腦,強大伐?

### 實用教程
1. [git - 簡明指南](http://rogerdudler.github.io/git-guide/index.zh.html),目前見過的最簡git指南,原來的英文版被翻譯成了各種其他語言,漫畫超友愛 ????
1. [Git 簡要教程](https://gist.github.com/bigeagle/3953973),b哥整理的教程,簡潔實用。
1. [Git分支管理策略](http://www.ruanyifeng.com/blog/2012/07/git.html),阮一峰提供的針對Git分支管理策略。
1. [Git教程 - 廖雪峰](http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000) - 淺顯易懂的git中文教程
1. [Git Magic](http://www-cs-students.stanford.edu/~blynn/gitmagic/intl/zh_cn/),挺適合入門的教程,文字超友愛 ????
1. [Pro Git](http://git-scm.com/book),官方教程,非常全面,簡單入門的話先看前幾章就夠用了。
### Notes
1. [[svn1]]()[為什么我們要放棄Subversion](http://www.infoq.com/cn/articles/thoughtworks-practice-partiv)
1. [[svn2]]()[GIT和SVN之間的五個基本區別 | 外刊IT評論](http://www.vaikan.com/5-fundamental-differences-between-git-svn/)
1. [[svn3]]()[[INFRA-7524] April Fools: migrate Apache Subversion project over to the git repo - ASF JIRA](https://issues.apache.org/jira/browse/INFRA-7524)
- Introduction
- Part I Introduction to Programming
- 第一章-編程所謂何物
- 第二章-咋學編程
- 第三章-編程進階-數據結構與算法
- 第四章-操作系統及項目開發雜談
- 控制臺和圖形用戶界面
- 工程和單個文件的關系
- 第五章-編程語言
- 第六章-編程方法論雜談
- 好書哪里找
- 高效使用搜索引擎
- 好習慣
- 文本編輯器
- 版本控制
- 編程開發
- 第七章-教材推薦及其它
- 數據結構與算法類
- Operating System
- C
- C++
- Java
- Python
- Golang
- Network
- 數據庫
- Web-前端
- Web-后端
- 機器學習
- Linux
- GUI
- Android開發
- 數據挖掘與分析
- Spark
- 雜項