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

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 1、 版本控制 ## 1.1 什么是版本控制 ``` 版本控制(Revision control)是一種在開發的過程中用于管理我們對文件、目錄或工程等內容的修改歷史, 方便查看更改歷史記錄,備份以便恢復以前的版本的軟件工程技術 ``` * 實現跨區域多人協同開發 * 追蹤和記載一個或者多個文件的歷史紀錄 * 組織和保護你的源代碼和文檔 * 統計工作量 * 并行開發、提高開發效率 * 跟蹤記錄整個軟件的開發過程 * 減輕開發人員的負擔,節省時間,同時降低認為錯誤 ***** ---->簡而言之:用于管理多人協同開發項目的技術 ``` 沒有進行版本控制或者版本控制本身缺乏正確的流程管理,在軟件開發過程中將會引入很多問題, 如軟件代碼的一致性、軟件內容的冗余、軟件過程的事物性、軟件開發過程中的并發性、軟件源代碼的安 全性,以及軟件的整合等問題。 ``` ## 1.2常用術語 **1)、倉庫(Repository)** 受版本控制的所有文件修訂歷史的共享數據庫 **2)、工作空間(Workspace)** 本地硬盤或Unix 用戶帳戶上編輯的文件副本 **3)、工作樹/區(Working tree)** 工作區中包含了倉庫的工作文件。您可以修改的內容和提交更改作為新的提交到倉庫。 **4)、暫存區(Staging area)** 暫存區是工作區用來提交更改(commit)前可以暫存工作區的變化。 ![](https://box.kancloud.cn/c7fe88de655ee2da10270da9bdf0db48_618x235.png) **5)、索引(Index)** 索引是暫存區的另一種術語。 **6)、簽入(Checkin)** 將新版本復制回倉庫 **7)、簽出(Checkout)** 從倉庫中將文件的最新修訂版本復制到工作空間 **8)、提交(Commit)** 對各自文件的工作副本做了更改,并將這些更改提交到倉庫 **9)、沖突(Conflict)** 多人對同一文件的工作副本進行更改,并將這些更改提交到倉庫 **10)、合并(Merge)** 將某分支上的更改聯接到此主干或同為主干的另一個分支 **11)、分支(Branch)** 從主線上分離開的副本,默認分支叫master **12)、鎖(Lock)** 獲得修改文件的專有權限。 **13)、頭(HEAD)** 頭是一個象征性的參考,最常用以指向當前選擇的分支。 **14)、修訂(Revision)** 表示代碼的一個版本狀態。Git通過用SHA1 hash算法表示的ID來標識不同的版本。 **15)、標記(Tags)** 標記指的是某個分支某個特定時間點的狀態。通過標記,可以很方便的切換到標記時的狀態。 ## 1.3、常見的版本控制器 主流的版本控制器有如下這些: * **Git** * **SVN**(Subversion) * **CVS**(Concurrent Versions System) * **VSS**(Micorosoft Visual SourceSafe) * **TFS**(Team Foundation Server) * Visual Studio Online 版本控制產品非常的多(Perforce、Rational ClearCase、RCS(GNU Revision Control System)、Serena Dimention、SVK、BitKeeper、Monotone、Bazaar、Mercurial、SourceGear Vault),現在影響力最大且使用最廣泛的是Git與SVN ## 1.4、版本控制分類 ### **1.4.1、本地版本控制** 記錄文件每次的更新,可以對每個版本做一個快照,或是記錄補丁文件,適合個人用,如RCS。 ![](https://box.kancloud.cn/12302cda61b31f3c0b49a6104a5777ce_400x336.png) ### **1.4.2、集中版本控制** 所有的版本數據都保存在服務器上,協同開發者從服務器上同步更新或上傳自己的修改 ![](https://box.kancloud.cn/82cc5d0690f5a654fcc1b60cda2262b5_500x392.png) 所有的版本數據都存在服務器上,用戶的本地只有自己以前所同步的版本,如果不連網的話,用戶就看不到歷史版本,也無法切換版本驗證問題,或在不同分支工作。而且,所有數據都保存在單一的服務器上,有很大的風險這個服務器會損壞,這樣就會丟失所有的數據,當然可以定期備份。代表產品:SVN、CVS、VSS 注意:必須聯網,才能正常使用,要不然看不到版本信息等 ### 1.4.3、分布式版本控制 所有版本信息倉庫全部同步到本地的每個用戶,這樣就可以在本地查看所有版本歷史,可以離線在本地提交,只需在連網時push到相應的服務器或其他用戶那里。由于每個用戶那里保存的都是所有的版本數據,只要有一個用戶的設備沒有問題就可以恢復所有的數據,但這增加了本地存儲空間的占用。 ![](https://box.kancloud.cn/f21b3b6a514f7896658cce6777ad55bd_500x563.png) ## 1.5、Git與SVN最主要區別 SVN是集中式版本控制系統,版本庫是集中放在中央服務器的,而工作的時候,用的都是自己的電腦,所以首先要從中央服務器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服務器。集中式版本控制系統是必須聯網才能工作,對網絡帶寬要求較高。 CVS也是集中式版本控制系統 沒有本地庫和緩存區 ``` **優點:** 1.svn優點:集中式管理,管理方式在服務端配置好,客戶端只需要同步提交即可,使用方便,操作簡單,很容易就可以上手 2.在服務端統一控制好訪問權限,利用代碼的安全管理。 3.所有的代碼以服務端為準,代碼一致性高。 **缺點:** 1.所有操作都需要通過服務端進行同步,這會導致服務器性能要求比較高。如果服務器宕機了就無法提交代碼了。** 2.分支管理不靈活,svn分支是一個完整的目錄,且這個目錄擁有完整的實際文件,這些操作都是在服務端進行同步的,** ? ?不是本 地化操作,如果要刪除分支,也是需要將遠程的分支進行刪除,這會導致大家都得同步 3.需要連網,如果無法連接到服務器就無法提交代碼** ``` Git是分布式版本控制系統,沒有中央服務器,每個人的電腦就是一個完整的版本庫,工作的時候不需要聯網了,因為版本都在自己電腦上。協同的方法是這樣的:比如說自己在電腦上改了文件A,其他人也在電腦上改了文件A,這時,你們兩之間只需把各自的修改推送給對方,就可以互相看到對方的修改了。 ** 集體描述:** Git 與 SVN 區別點: 1、GIT是分布式的,SVN不是:這是GIT和其它非分布式的版本控制系統,例如SVN,CVS等,最核心的區別。 2.Git下載下來后,在本地不必聯網就可以看到所有的log,很方便學習,SVN卻需要聯網 3、GIT把內容按元數據方式存儲,而SVN是按文件:所有的資源控制系統都是把文件的元信息隱藏在一個類似.svn,.cvs等的文件夾里。 4、GIT分支和SVN的分支不同:分支在SVN中一點不特別,就是版本庫中的另外的一個目錄。 5、GIT沒有一個全局的版本號,而SVN有:目前為止這是跟SVN相比GIT缺少的最大的一個特征。 6、GIT的內容完整性要優于SVN:GIT的內容存儲使用的是SHA-1哈希算法。這能確保代碼內容的完整性,確保在遇到磁盤故障和網絡問題時降低對版本庫的破壞。 # 2、git理論基礎 ## 3.1、工作區域 Git本地有三個工作區域:工作目錄(Working Directory)、暫存區(Stage/Index)、資源庫(Repository或Git Directory)。如果在加上遠程的git倉庫(Remote Directory)就可以分為四個工作區域。文件在這四個區域之間的轉換關系如下: ![](https://box.kancloud.cn/0304e9a79baaea2acae04f8a40414f17_318x305.png) * Workspace:工作區,就是你平時存放項目代碼的地方 * Index / Stage:暫存區,用于臨時存放你的改動,事實上它只是一個文件,保存即將提交到文件列表信息 * Repository:倉庫區(或本地倉庫),就是安全存放數據的位置,這里面有你提交到所有版本的數據。其中HEAD指向最新放入倉庫的版本 * Remote:遠程倉庫,托管代碼的服務器,可以簡單的認為是你項目組中的一臺電腦用于遠程數據交換 本地的三個區域確切的說應該是git倉庫中HEAD指向的版本 ![](https://box.kancloud.cn/0b44cd4e469d939a2b9a5aa44d44d912_818x539.png) ** HEAD ** HEAD:指向最近一次提交后的結果 從git的分支說起,git 中的分支,其實本質上僅僅是個指向 commit 對象的可變指針,它保存著一個名為 HEAD 的特別指針。在 git 中,它是一個指向你正在工作中的本地分支的指針,可以將 HEAD 想象為當前分支的別名。 ![](https://img.kancloud.cn/9d/c2/9dc212ae840a457bc8bc8157532dfe39_500x287.png) git log 查看所有提交信息 ls-1 每行列出一個文件,即以單列形式列出。 ![](https://img.kancloud.cn/a3/c0/a3c0fe4776a28570ec3539b2f9d616f3_629x182.png) ls-a 列出所有文件,包括隱藏文件。 ![](https://img.kancloud.cn/5d/90/5d900e30b98b2ec790484a63deca286b_634x70.png) git reset 撤回到指定版本,前面的都會被替換 沒有歷史可循 git revert 建議一次一次的撤回 追加提交 # 3、git庫狀態 ![](https://img.kancloud.cn/1f/57/1f57555738037c81281c2f52dd354818_800x330.png) * **Untracked**: 未跟蹤, 此文件在文件夾中, 但并沒有加入到git庫, 不參與版本控制. 通過`git add` 狀態變為`Staged`. * **Unmodify**: 文件已經入庫, 未修改, 即版本庫中的文件快照內容與文件夾中完全一致. 這種類型的文件有兩種去處, 如果它被修改, 而變為`Modified`. 如果使用`git rm`移出版本庫, 則成為`Untracked`文件 * **Modified**: 文件已修改, 僅僅是修改, 并沒有進行其他的操作. 這個文件也有兩個去處, 通過`git add`可進入暫存`staged`狀態, 使用`git checkout` 則丟棄修改過, 返回到`unmodify`狀態, 這個`git checkout`即從庫中取出文件, 覆蓋當前修改 * **Staged**: 暫存狀態. 執行`git commit`則將修改同步到庫中, 這時庫中的文件和本地文件又變為一致, 文件為`Unmodify`狀態. 執行`git reset HEAD filename`取消暫存, 文件狀態為`Modified` ![](https://img.kancloud.cn/c7/73/c77318bed02b635fea0a78caa82c53b6_713x359.png)
                  <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>

                              哎呀哎呀视频在线观看