<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Git 比 SVN 強太多了!

          共 4246字,需瀏覽 9分鐘

           ·

          2021-12-10 06:21

          來源丨云加社區(qū)

          segmentfault.com/a/1190000016865867



          ?Git vs SVN?

          Git 和 SVN 孰優(yōu)孰好,每個人有不同的體驗。

          一、Git是分布式的,SVN是集中式的

          這是 Git 和 SVN 最大的區(qū)別。若能掌握這個概念,兩者區(qū)別基本搞懂大半。因為 Git 是分布式的,所以 Git 支持離線工作,在本地可以進行很多操作,包括接下來將要重磅推出的分支功能。而 SVN 必須聯網才能正常工作。

          二、Git復雜概念多,SVN簡單易上手

          所有同時掌握 Git 和 SVN 的開發(fā)者都必須承認,Git 的命令實在太多了,日常工作需要掌握 add, commit, status, fetch, push, rebase等,若要熟練掌握,還必須掌握 rebasemerge的區(qū)別, fetchpull的區(qū)別等,除此之外,還有 cherry-picksubmodulestash等功能,僅是這些名詞聽著都很繞。

          在易用性這方面,SVN 會好得多,簡單易上手,對新手很友好。但是從另外一方面看,Git 命令多意味著功能多,若我們能掌握大部分 Git 的功能,體會到其中的奧妙,會發(fā)現再也回不去 SVN 的時代了。

          三、Git分支廉價,SVN分支昂貴

          在版本管理里,分支是很常使用的功能。在發(fā)布版本前,需要發(fā)布分支,進行大需求開發(fā),需要 feature 分支,大團隊還會有開發(fā)分支,穩(wěn)定分支等。在大團隊開發(fā)過程中,常常存在創(chuàng)建分支,切換分支的需求。

          Git 分支是指針指向某次提交,而 SVN 分支是拷貝的目錄。這個特性使 Git 的分支切換非常迅速,且創(chuàng)建成本非常低。

          而且 Git 有本地分支,SVN 無本地分支。在實際開發(fā)過程中,經常會遇到有些代碼沒寫完,但是需緊急處理其他問題,若我們使用 Git,便可以創(chuàng)建本地分支存儲沒寫完的代碼,待問題處理完后,再回到本地分支繼續(xù)完成代碼。


          ?Git核心思想?

          Git 最核心的一個概念就是工作流

          • 工作區(qū)(Workspace)?是電腦中實際的目錄。
          • 暫存區(qū)(Index)?類似于緩存區(qū)域,臨時保存你的改動。
          • 倉庫區(qū)(Repository),分為本地倉庫和遠程倉庫。

          從 SVN 切換到 Git,最難理解并且最不能理解的是暫存區(qū)和本地倉庫。熟練使用 Git 后,會發(fā)現這簡直是神設計,由于這兩者的存在,使許多工作變得易管理。

          通常提交代碼分為幾步:

          • git add?從工作區(qū)提交到暫存區(qū)
          • git commit?從暫存區(qū)提交到本地倉庫
          • git push或?git svn dcommit?從本地倉庫提交到遠程倉庫

          一般來說,記住以下命令,便可進行日常工作了(圖片來源于網絡):


          ?Git-SVN常用命令?

          看到Git-SVN不要懵!是的,在Git中甚至有命令可以直接和SVN進行橋接,Git 中所有與SVN橋接的基礎命令就是 git svn

          若服務器使用的 SVN,但是本地想要體驗 Git 的本地分支,離線操作等功能,可以使用 Git-SVN功能。

          常用操作如下(圖片來源于網絡):

          1. # 下載一個 SVN 項目和它的整個代碼歷史,并初始化為 Git 代碼庫

          2. $ git svn clone -s [repository]


          3. # 查看當前版本庫情況

          4. $ git svn info


          5. # 取回遠程倉庫所有分支的變化

          6. $ git svn fetch


          7. # 取回遠程倉庫當前分支的變化,并與本地分支變基合并

          8. $ git svn rebase


          9. # 上傳當前分支的本地倉庫到遠程倉庫

          10. $ git svn dcommit


          11. # 拉取新分支,并提交到遠程倉庫

          12. $ svn copy [remote_branch] [new_remote_branch] -m [message]


          13. # 創(chuàng)建遠程分支對應的本地分支

          14. $ git checkout -b [local_branch] [remote_branch]


          ?初 始 化?

          從本節(jié)開始,除特殊說明,以下命令均適用于 Git 與 Git-SVN。

          1. # 在當前目錄新建一個Git代碼庫

          2. $ git init


          3. # 下載一個項目和它的整個代碼歷史 [Git only]

          4. $ git clone [url]


          ?配? ? 置?

          1. # 列舉所有配置

          2. $ git config -l


          3. # 為命令配置別名

          4. $ git config --global alias.co checkout

          5. $ git config --global alias.ci commit

          6. $ git config --global alias.st status

          7. $ git config --global alias.br branch


          8. # 設置提交代碼時的用戶信息

          9. $ git config [--global] user.name "[name]"

          10. $ git config [--global] user.email "[email address]"

          Git 用戶的配置文件位于 ~/.gitconfig

          Git 單個倉庫的配置文件位于 ~/$PROJECT_PATH/.git/config


          ?增刪文件?

          1. # 添加當前目錄的所有文件到暫存區(qū)

          2. $ git add .


          3. # 添加指定文件到暫存區(qū)

          4. $ git add ...


          5. # 添加指定目錄到暫存區(qū),包括其子目錄

          6. $ git add


          7. # 刪除工作區(qū)文件,并且將這次刪除放入暫存區(qū)

          8. $ git rm [file1] [file2] ...


          9. # 停止追蹤指定文件,但該文件會保留在工作區(qū)

          10. $ git rm --cached [file]


          11. # 改名文件,并且將這個改名放入暫存區(qū)

          12. $ git mv [file-original] [file-renamed]

          把文件名 file1 添加到 .gitignore 文件里,Git 會停止跟蹤 file1 的狀態(tài)。


          ?分? ?支?

          1. # 列出所有本地分支

          2. $ git branch


          3. # 列出所有本地分支和遠程分支

          4. $ git branch -a


          5. # 新建一個分支,但依然停留在當前分支

          6. $ git branch [branch-name]


          7. # 新建一個分支,并切換到該分支

          8. $ git checkout -b [new_branch] [remote-branch]


          9. # 切換到指定分支,并更新工作區(qū)

          10. $ git checkout [branch-name]


          11. # 合并指定分支到當前分支

          12. $ git merge [branch]


          13. # 選擇一個 commit,合并進當前分支

          14. $ git cherry-pick [commit]


          15. # 刪除本地分支,-D 參數強制刪除分支

          16. $ git branch -d [branch-name]


          17. # 刪除遠程分支

          18. $ git push [remote] :[remote-branch]


          ?提? ?交?

          1. # 提交暫存區(qū)到倉庫區(qū)

          2. $ git commit -m [message]


          3. # 提交工作區(qū)與暫存區(qū)的變化直接到倉庫區(qū)

          4. $ git commit -a


          5. # 提交時顯示所有 diff 信息

          6. $ git commit -v


          7. # 提交暫存區(qū)修改到倉庫區(qū),合并到上次修改,并修改上次的提交信息

          8. $ git commit --amend -m [message]


          9. # 上傳本地指定分支到遠程倉庫

          10. $ git push [remote] [remote-branch]


          ?拉? ?取?

          1. # 下載遠程倉庫的所有變動 (Git only)

          2. $ git fetch [remote]


          3. # 顯示所有遠程倉庫 (Git only)

          4. $ git remote -v


          5. # 顯示某個遠程倉庫的信息 (Git only)

          6. $ git remote show [remote]


          7. # 增加一個新的遠程倉庫,并命名 (Git only)

          8. $ git remote add [remote-name] [url]


          9. # 取回遠程倉庫的變化,并與本地分支合并,(Git only), 若使用 Git-SVN,請查看第三節(jié)

          10. $ git pull [remote] [branch]


          11. # 取回遠程倉庫的變化,并與本地分支變基合并,(Git only), 若使用 Git-SVN,請查看第三節(jié)

          12. $ git pull --rebase [remote] [branch]


          ?撤? ?銷?

          1. # 恢復暫存區(qū)的指定文件到工作區(qū)

          2. $ git checkout [file]


          3. # 恢復暫存區(qū)當前目錄的所有文件到工作區(qū)

          4. $ git checkout .


          5. # 恢復工作區(qū)到指定 commit

          6. $ git checkout [commit]


          7. # 重置暫存區(qū)的指定文件,與上一次 commit 保持一致,但工作區(qū)不變

          8. $ git reset [file]


          9. # 重置暫存區(qū)與工作區(qū),與上一次 commit 保持一致

          10. $ git reset --hard


          11. # 重置當前分支的指針為指定 commit,同時重置暫存區(qū),但工作區(qū)不變

          12. $ git reset [commit]


          13. # 重置當前分支的HEAD為指定 commit,同時重置暫存區(qū)和工作區(qū),與指定 commit 一致

          14. $ git reset --hard [commit]


          15. # 新建一個 commit,用于撤銷指定 commit

          16. $ git revert [commit]


          17. # 將未提交的變化放在儲藏區(qū)

          18. $ git stash


          19. # 將儲藏區(qū)的內容恢復到當前工作區(qū)

          20. $ git stash pop


          ?查? ?詢?

          1. # 查看工作區(qū)文件修改狀態(tài)

          2. $ git status


          3. # 查看工作區(qū)文件修改具體內容

          4. $ git diff [file]


          5. # 查看暫存區(qū)文件修改內容

          6. $ git diff --cached [file]


          7. # 查看版本庫修改記錄

          8. $ git log


          9. # 查看某人提交記錄

          10. $ git log --author=someone


          11. # 查看某個文件的歷史具體修改內容

          12. $ git log -p [file]


          13. # 查看某次提交具體修改內容

          14. $ git show [commit]





          推薦閱讀:

          圖解文章匯總
          計算機基礎學習路線
          為了拿捏 Redis 數據結構,我畫了 40 張圖(完整版)
          小林的圖解系統(tǒng),大曝光!
          不鴿了,小林的「圖解網絡 3.0 」發(fā)布!
          瀏覽 40
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  影音先锋成人在线麻豆 | 99久99 | 91操屄| 在线观看的成人黄色视频 | 黄色视频在线观 |