<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                我將用類比方式來介紹版本控制的概念。更嚴謹的解釋參見?[維基百科版本修訂控制條目](http://en.wikipedia.org/wiki/Revision_control)。 [TOC] ## 工作是玩 我從小就玩電腦游戲。相反,我只是在長大后才開始使用版本控制系統。我想我并不特 殊,并且,對比兩者工作方式可使這些概念更易解釋,也易于理解。 編寫代碼,或編輯文檔和玩游戲差不多。在你做出了很多進展之后,你最好保存一下。 去做這個,會點擊你所信任的編輯器保存按鈕就好了。 但這將覆蓋老版本。就像那些學校里玩的老游戲,只有一個存檔:你確實可以保存,但 你不能回到更老的狀態了。這真讓人掃興,因為那個狀態可能恰好保存了這個游戲特別 有意思一關,說不定哪天你想再玩一下呢。或者更糟糕的,你當前的保存是個必敗局, 這樣你就不得不從頭開始玩了。 ## 版本控制 在編輯的時候,如果想保留舊版本,你可以將文件“另存為”一個不同的文件,或在保 存之前將文件拷貝到別處。你可能壓縮這些文件以節省空間。這是一個初級的靠手工的 版本控制方式。游戲軟件早就提高了這塊,很多都提供多個基于時間戳的自動存檔槽。 讓我們看看稍稍復雜的情況。比如你有很多放在一起的文件,比如項目源碼,或網站文 件。現在如你想保留舊版本,你不得不把整個目錄存檔。手工保存多個版本很不方便, 而且很快會耗費巨大。 在一些電腦游戲里,一個存檔真的包含在一個充滿文件的目錄里。這些游戲為玩家屏蔽 了這些細節,并提供一個方便易用的界面來管理該目錄的不同版本。 版本控制系統也沒有兩樣。兩者提供友好的界面,來管理目錄里的東西。你可以頻繁保 存,也可以之后加載任一保存。不像大多計算機游戲,版本控制系統通常精于節省存儲 空間。一般情況如果兩個版本間只有少數文件的變更,每個文件的變更也不大,那就只 存儲差異的部分,而不是把全部拷貝的都保存下來,以節省存儲空間。 ## 分布控制 現在設想一個很難的游戲。太難打了,以至于世界各地很多骨灰級玩家決定組隊,分享 他們游戲存檔以攻克它。Speedrun們就是實際中的例子:在同一個游戲里,玩家們分別 攻克不同的等級,協同工作以創造驚人戰績。 你如何搭建一個系統,使得他們易于得到彼此的存檔?并易于上載新的存檔? 在過去,每個項目都使用中心式版本控制。某個服務器上放所有保存的游戲記錄。其他 人就不用了。每個玩家在他們機器上最多保留幾個游戲記錄。當一個玩家想更新進度時 候,他們需要把最新進度從主服務器下載下來,玩一會兒,保存并上載到主服務器以供 其他人使用。 假如一個玩家由于某種原因,想得到一個較舊版本的游戲進度怎么樣?或許當前保存的 游戲是一個注定的敗局,因為某人在第三級忘記撿某個物品;他們希望能找到最近一個 可以完成的游戲記錄。或者他們想比較兩個舊版本間的差異,來估算某個特定玩家干了 多少活。 查看舊版本的理由有很多,但檢查的辦法都是一樣的。他們必須去問中心服務器要那個 舊版本的記錄。需要的舊版本越多,和服務器的交互就越多。 新一代的版本控制系統,Git就是其中之一,是分布式的,可以被認作廣義上的中心式系 統。從主服務器下載時玩家會得到所有保存的記錄,而不僅是最新版。這看起來他們好 像把中心服務器做了個鏡像。 最初的克隆操作可能比較費時,特別當有很長歷史的時,但從長遠看這是值得的。一個 顯而易見的好處是,當查看一個舊版本時,不再需要和中心服務器通訊了。 ## 一個誤區 一個很常見的錯誤觀念是,分布式系統不適合需要官方中心倉庫的項目。這與事實并不 相符。給誰照相也不會偷走他們的靈魂。類似地,克隆主倉庫并不降低它的重要性。 一般來說,一個中心版本控制系統能做的任何事,一個良好設計的分布式系統都能做得 更好。網絡資源總要比本地資源耗費更費。不過我們應該在稍后分析分布式方案的缺點, 這樣人們才不會按照習慣做出錯誤的比較。 一個小項目或許只需要分布式系統提供的一小部分功能,但是,在項目很小的時候,應 該用規劃不好的系統?就好比說,在計算較小數目的時候應該使用羅馬數字? 而且,你的項目的增長可能會超出你最初的預期。從一開始就使用Git好似帶著一把瑞士 軍刀,盡管你很多時候只是用它來開開瓶蓋。某天你迫切需要一把改錐,你就會慶幸你 所有的不單單是一個啟瓶器。 ## 合并沖突 對于這個話題,電腦游戲的類比顯得不夠用。那讓我們再來看看文檔編輯的情況吧。 假設Alice在文檔開頭插入一行,并且Bob在文檔末尾添加一行。他們都上傳了他們的改 動。大多數系統將自動給出一個合理的處理方式:接受且合并他們的改動,這樣Alice和 Bob兩人的改動都會生效。 現在假設Alice和Bob對文件的同一行做了不同的改動。如果沒有人工參與的話,這個沖 突是無法解決的。第二個人在上載文件時,會收到?*合并沖突*?的通知,要么用一個人 的改動覆蓋另一個的,要么完全修訂這一行。 更復雜的情況也可能出現。版本控制系統自己處理相對簡單的情況,把困難的情況留給 人來處理。它們的行為通常是可配置的。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看