### 一份基準代碼(*Codebase*),多份部署(*deploy*)
12-Factor應用(譯者注:應該是說一個使用本文概念來設計的應用,下同)通常會使用版本控制系統加以管理,如[Git](http://git-scm.com/),[Mercurial](http://mercurial.selenic.com/),?[Subversion](http://subversion.apache.org/)。一份用來跟蹤代碼所有修訂版本的數據庫被稱作?*代碼庫*(code repository, code repo, repo)。
在類似 SVN 這樣的集中式版本控制系統中,*基準代碼*?就是指控制系統中的這一份代碼庫;而在 Git 那樣的分布式版本控制系統中,*基準代碼*?則是指最上游的那份代碼庫。

基準代碼和應用之間總是保持一一對應的關系:
* 一旦有多個基準代碼,就不能稱為一個應用,而是一個分布式系統。分布式系統中的每一個組件都是一個應用,每一個應用可以分別使用 12-Factor 進行開發。
* 多個應用共享一份基準代碼是有悖于 12-Factor 原則的。解決方案是將共享的代碼拆分為獨立的類庫,然后使用?[依賴管理](http://12factor.net/zh_cn/dependencies)?策略去加載它們。
盡管每個應用只對應一份基準代碼,但可以同時存在多份部署。每份?*部署*?相當于運行了一個應用的實例。通常會有一個生產環境,一個或多個預發布環境。此外,每個開發人員都會在自己本地環境運行一個應用實例,這些都相當于一份部署。
所有部署的基準代碼相同,但每份部署可以使用其不同的版本。比如,開發人員可能有一些提交還沒有同步至預發布環境;預發布環境也有一些提交沒有同步至生產環境。但它們都共享一份基準代碼,我們就認為它們只是相同應用的不同部署而已。