<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>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### 版本模型 版本控制系統的核心任務是提供協作編輯和數據共享,但是不同的系統使用不同的策略來達到目的。 ### 文件共享的問題 所有的版本控制系統都需要解決這樣一個基礎問題:怎樣讓系統允許用戶共享信息,而不會讓他們因意外而互相干擾?版本庫里意外覆蓋別人的更改非常的容易。 考慮[圖2.2 “需要避免的問題”]( "圖2.2.需要避免的問題")的情景,我們有兩個共同工作者,Harry和Sally,他們想同時編輯版本庫里的同一個文件,如果首先Harry保存它的修改,過了一會,Sally可能湊巧用自己的版本覆蓋了這些文件,Harry的更改不會永遠消失(因為系統記錄了每次修改),Harry所有的修改*不會*出現在Sally的文件中,所以Harry的工作還是丟失了―至少是從最新的版本中丟失了―而且是意外的,這就是我們要明確避免的情況! **圖2.2.需要避免的問題** ![需要避免的問題](https://box.kancloud.cn/2016-08-21_57b8a3339850f.png) ### 鎖定-修改-解鎖 方案 許多版本控制系統使用*鎖定-修改-解鎖*這種機制解決這種問題,在這樣的系統里,在一個時間段里版本庫的一個文件只允許被一個人修改。首先在修改之前,Harry要“鎖定”住這個文件,鎖定很像是從圖書館借一本書,如果Harry鎖住這個文件,Sally不能做任何修改,如果Sally想請求得到一個鎖,版本庫會拒絕這個請求。在Harry結束編輯并且放開這個鎖之前,她只可以閱讀文件。Harry解鎖后,就要換班了,Sally得到自己的輪換位置,鎖定并且開始編輯這個文件。[圖2.3 “鎖定-修改-解鎖 方案”]( "圖2.3.鎖定-修改-解鎖 方案")描述了這樣的解決方案。 **圖2.3.鎖定-修改-解鎖 方案** ![鎖定-修改-解鎖 方案](https://box.kancloud.cn/2016-08-21_57b8a333ad149.png) 鎖定-修改-解鎖模型有一點問題就是限制太多,經常會成為用戶的障礙: - *鎖定可能導致管理問題。*有時候Harry會鎖住文件然后忘了此事,這就是說Sally一直等待解鎖來編輯這些文件,她在這里僵住了。然后Harry去旅行了,現在Sally只好去找管理員放開鎖,這種情況會導致不必要的耽擱和時間浪費。 - *鎖定可能導致不必要的線性化開發。*如果Harry編輯一個文件的開始,Sally想編輯同一個文件的結尾,這種修改不會沖突,設想修改可以正確的合并到一起,他們可以輕松的并行工作而沒有太多的壞處,沒有必要讓他們輪流工作。 - *鎖定可能導致錯誤的安全狀態。*假設Harry鎖定和編輯一個文件A,同時Sally鎖定并編輯文件B,如果A和B互相依賴,這種變化是必須同時作的,這樣A和B不能正確的工作了,鎖定機制對防止此類問題將無能為力―從而產生了一種處于安全狀態的假相。很容易想象Harry和Sally都以為自己鎖住了文件,而且從一個安全,孤立的情況開始工作,因而沒有盡早發現他們不匹配的修改。 ### 拷貝-修改-合并 方案 Subversion,CVS和一些版本控制系統使用*拷貝-修改-合并*模型,在這種模型里,每一個客戶聯系項目版本庫建立一個個人*工作拷貝*―版本庫中文件和目錄的本地映射。用戶并行工作,修改各自的工作拷貝,最終,各個私有的拷貝合并在一起,成為最終的版本,這種系統通常可以輔助合并操作,但是最終要靠人工去確定正誤。 這是一個例子,Harry和Sally為同一個項目各自建立了一個工作拷貝,工作是并行的,修改了同一個文件A,Sally首先保存修改到版本庫,當Harry想去提交修改的時候,版本庫提示文件A已經*過期*,換句話說,A在他上次更新之后已經更改了,所以當他通過客戶端請求*合并*版本庫和他的工作拷貝之后,碰巧Sally的修改和他的不沖突,所以一旦他把所有的修改集成到一起,他可以將工作拷貝保存到版本庫,[圖2.4 “拷貝-修改-合并 方案”]( "圖2.4.拷貝-修改-合并 方案")和[圖2.5 “拷貝-修改-合并 方案(續)”]( "圖2.5.拷貝-修改-合并 方案(續)")展示了這一過程。 **圖2.4.拷貝-修改-合并 方案** ![拷貝-修改-合并 方案](https://box.kancloud.cn/2016-08-21_57b8a333c4e57.png) **圖2.5.拷貝-修改-合并 方案(續)** ![拷貝-修改-合并 方案(續)](https://box.kancloud.cn/2016-08-21_57b8a333db0f0.png) 但是如果Sally和Harry的修改*交迭*了該怎么辦?這種情況叫做*沖突*,這通常不是個大問題,當Harry告訴他的客戶端去合并版本庫的最新修改到自己的工作拷貝時,他的文件A就會處于沖突狀態:他可以看到一對沖突的修改集,并手工的選擇保留一組修改。需要注意的是軟件不能自動的解決沖突,只有人可以理解并作出智能的選擇,一旦Harry手工的解決了沖突―也許需要與Sally討論―它可以安全的把合并的文件保存到版本庫。 拷貝-修改-合并模型感覺是有一點混亂,但在實踐中,通常運行的很平穩,用戶可以并行的工作,不必等待別人,當工作在同一個文件上時,也很少會有交迭發生,沖突并不頻繁,處理沖突的時間遠比等待解鎖花費的時間少。 最后,一切都要歸結到一條重要的因素:用戶交流。當用戶交流貧乏,語法和語義的沖突就會增加,沒有系統可以強制用戶完美的交流,沒有系統可以檢測語義上的沖突,所以沒有任何證據能夠承諾鎖定系統可以防止沖突,實踐中,鎖定除了約束了生產力,并沒有做什么事。
                  <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>

                              哎呀哎呀视频在线观看