text: 在程式設計中，分散式版本控制，是一種版本控制的方式，它允許軟體開發者可以共同參與一個軟體開發專案，但是不必在相同的網路系統下工作。其作法是在每個開發者電腦中複製一份完整的程式碼庫以及完整歷史。因此在無法連線網路時，仍可以進行軟體的分支及合併，可以加速大部份的作業，增加此情形可以進行的工作，而且系統的程式碼庫可以在多家電腦上備份，不需靠單一位置的備份。而多個位置的程式碼庫再透過其他機制來達到同步。以分散式版本控制方法，作出的軟體版本控制系統，稱為分散式版本控制系統。著名的分散式版本控制系統有Monotone、Git等。分散式和集中式版本控制系統的比較.分散式版本控制系統用對等網路的作法來處理版本控制，而集中式版本控制系統則是用主從式架構的作法。分散式版本控制系統同步各軟體儲存庫的方式是用對等網路的方式傳送Patch。在程式碼庫中沒有單一的中央版本，每一個使用者都有工作複本以及完整的變更歷史。和集中式版本控制系統相比，分散式版本控制系統的優點如下：和集中式版本控制系統相比，分散式版本控制系統的缺點如下：有些版本控制系統原來是集中式的，但也會加入一些分散式的特點。例如Subversion的許多機能可以在沒有網路時執行。Visual Studio Online和Visual Studio Team Services除了集中式的版本管理外，也支援用Git進行的分散式版本控制。也有些分散式版本控制系統設法要改善取出時間以及儲存成本的問題，例如微軟開發的Git虛擬檔案系統就可以在很大的程式碼庫下運作，會提供一個虛擬檔案系統，只在有需要時才會下載檔案到電腦中。工作模式.分散式版本控制比較適合大型專案，有一部份由獨立的工作者所開發，像是Linux核心計劃，因為開發者可以獨立工作，可以提交其合併修改。分散式模型的靈活性可以配合客製化的程式碼產生工作流程。最常使用的是。在集中型的模型中，開發者需要將其工作串列化，以避免不同版本之間的問題。中心儲存庫及分支儲存庫.每一個專案都有中心儲存庫，一般也是官方的儲存庫，會用專案維護者管理。開發者會複製中心儲存庫的內容，建立本地儲存庫。開發者再定期確認中心儲存庫的修改內容，使本地儲存庫和中心儲存庫同步。開發者在本地儲存庫建立新的分支，在分支上修改程式碼。在開發完成之後，再將修改內容整合到中心儲存庫。拉取請求.在分散式版本控制的軟體中，若要修改軟體，一般會用「拉取請求」，若此修改內容應該成為正式程式碼庫的一部份，就需要合併拉取請求中提到的軟體內容。開發者在有新的軟體變更時，會提出「拉取請求」，告訢專案維護者有新的軟體變更。一般而言每一個拉取請求會有對應的討論串，可以針對軟體修改的內容進行討論。可以存取儲存庫的人都可以看到提交的拉取請求。專案維護者可以接受或是拒絕拉取請求的內容。若拉取請求經過審查，已被核可，就會合併到儲存庫中。依工作流程的不同，有可能在加入這段程式的軟體版本正式發行前，進行軟體的測試。因此，有些專案會有一個特殊的分支，合併未測試的拉取請求。也有些專案會有自動化測試平臺，執行並測試每一個拉取請求的內容，可能會用持續整合工具，再由審查者檢查新的程式碼測試覆蓋率是否足夠。歷史.第一代的開源分散式版本控制系統有GNU arch、Monotone和，不過開源的分散式版本控制系統一開始並不太流行，直到Git及Mercurial釋出後才流行。在2002年至2005年時，Linux核心的開發是透過BitKeeper。Git會推出的原因就是因為BitKeeper的公司收回了給Linus Torvalds及Linux核心開發者的免費軟體授權。
metadata.dataset: erhwenkuo/wikipedia-zhtw
metadata.title: 分散式版本控制
metadata.url: https://zh.wikipedia.org/wiki?curid=4235891