1. 程式人生 > 實用技巧 >221. 最大正方形-dp-中等難度

221. 最大正方形-dp-中等難度

分散式版本控制工具

  • 基本使用

    • 安裝

      Git 官網直接下載安裝程式,右鍵選單中有 Git Bash 選項,點選彈出命令列視窗即安裝成功

    • 初始配置

      $ git config --global user.name "Your Name"
      $ git config --global user.email "Your email"
      
    • 初始化倉庫

      git init 設定當前目錄為 Git 可以管理的倉庫

    • 檢視當前目錄檔案

      ls -ah

      • -ah 引數展示所有檔案,包括隱藏檔案,如果這個倉庫為Git 管理的倉庫,就可以看到一個被隱藏的檔案 .git
    • 工作區,暫存區,版本庫

      • git add file

        將工作區 file 的修改新增到暫存區

        git add file1 file2 可以新增多個檔案

      • git reset

        git reset HEAD file 將暫存區檔案的修改放回工作區

        git reset --hard HEAD^ 工作區回退到上一版本

        git reset --hard id 回退到 id 指定版本(就是用git log中的id,只用寫前幾位即可)

      • git commit

        將暫存區的修改全部提交到版本庫

        • git commit -m 'add new file'

          -m 引數,給提交新增說明

      • git checkout -- file

        丟棄工作區該檔案的修改(實際就是用版本庫裡的版本代替工作區版本)

      • 刪除檔案

        rm file

    • 除錯命令

      • git diff

        檢視工作區和版本庫裡面最新版本的區別

        git diff HEAD --file 指定檔案

      • git status

        檢視倉庫當前狀態

      • git log

        git log --graph --pretty=oneline --abbrev-commit 顯示在一條直線上

        檢視日誌

        如果日誌很長,則按 q 退出

      • git reflog

        記錄每一次命令

  • 遠端倉庫

    找一臺電腦充當伺服器角色,每天24小時開機,其他每個人從這個"伺服器"倉庫克隆一份到自己電腦上,並各自把各自的提交推送到伺服器倉庫裡,也從伺服器倉庫中拉取別人的提交

    • GitHub

      GitHub 就是 Git 的一個遠端倉庫

      • 關聯 GitHub 遠端倉庫

        本地倉庫與 GitHub 倉庫之間的傳輸是通過 SSH 加密的(將自己的公鑰給 github , github 就能對你的每次提交進行身份認證)

        • 建立SSH Key

          使用者目錄看是否有 .ssh 資料夾,如果有,看目錄下有沒有 id_rsaid_rsa_pu,如果有則已經建立過了 SSH Key ,如果沒有,開啟 Git Bash,建立 SSH key

          ssh-keygen -t rsa -C "郵箱" --> 一路回車

        • 新增遠端庫

          git remote add origin [email protected]:buxiaoxing/learngit.git

          origin 就是 遠端庫的名字

        • 刪除遠端庫

          git remote rm origin

        • 向遠端庫推送

          git push -u origin master

          第一次推送

          git push origin master

          以後推送

          :第一次推送報錯 connection timedout 時,在金鑰資料夾裡建立 config 檔案

        • 檢視遠端倉庫資訊

          git remote -v

        • 從遠端庫克隆

          git clone 倉庫地址

          倉庫地址有 https 和 git 地址,但 https 較慢

    • Gitee

      國內的 Git 託管服務,速度比 Github 快很多

      同樣也是通過 SSH 金鑰進行身份認證

    • 搭建自己的 Git 伺服器

      需要準備一臺執行Linux的機器,強烈推薦用Ubuntu或Debian

      使用 gitblit 幫助建立 Git 伺服器

  • 分支

    建立一個屬於自己的分支,別人看不到,還繼續在原來的分支上正常工作,你在自己的分支上幹活。想提交就提交,知道開發完畢後,再一次性合併到原來的分支上,既安全又不影響別人工作

    • Git 上分支的實現

      • master --> 指向最新的提交

      • HEAD --> 指向當前分支

        一開始的時候,master 分支是一條線,Git 用 master 指向最新的提交,再用 HEAD 指向 master ,就能確定當前分支,以及當前分支的提交點

        建立一個分支 dev

        git branch dev

        切換到分支

        git checkout/switch dev

        建立並切換(等於前面兩個命令)

        git checkout -b dev 或者 git checkout -c dev

        檢視當前分支

        git branch

        dev 上進行一次新的提交後, dev 指標往前移動一步,而 master 指標不變

        dev 上的工作完成了,就可以把 dev 合併到 master 上,直接將 master 指向 dev 的提交就完成合並了

        合併分支

        git merge dev 合併指定分支到當前分支

        合併完成後,還可以將 dev 分支刪除,就是將 dev 指標刪除,我們就只剩下一條 master 分支

        刪除分支

        git branch -d dev

    • 衝突

      • 如果兩個分支對同一檔案的同一地方都進行了修改,這個時候合併兩個分支就會產生衝突

        這個時候就需要手動解決衝突

      • 修改後再提交,分支變化如圖

      • 最後再將分支刪除

      • 複製一個特定提交到當前分支

        git chery-pick <提交的id-->可以通過 git log 檢視>

    • 禁止使用快速合併分支 Fast forward

      使用 Fast forward 模式,這種模式下,刪除分支後,會丟掉分支資訊,如果要強制禁用 Fast forward 模式,Git 就會在 merge 時生成一個新的 commit ,從歷史資訊就可以看出分支資訊

      git merge --no-ff -m 'merge with no-ff' dev

      因為本次合併要建立一個新的 commit ,所以加上 -m 引數,把 commit 的描述寫進去

      注:Fast forward 合併就只是將 master 的指標指向 dev,並沒有提交操作,而禁用 Fast forward 就相當於 master 在自己分支上做了一次與 dev 上相同的提交

    • 工作現場'儲藏'

      有時候我們在 dev 上的工作還沒有完成,我們需要去其他分支工作,此時就可以將 dev 的工作現場 '儲藏'起來

      • git stash 當前工作現場'儲藏起來',以後可以恢復現場繼續工作

        (不能追蹤到沒有 add 過的檔案,所以在我們儲藏工作現場時確保所有檔案都是 add 過的)

      • git stash list 檢視工作現場儲藏位置

      • git stash apply 恢復 stash 中的內容,但 stash 中的內容不刪除

        git stash apply stash@{0} 恢復指定 stash

      • git stash pop 恢復的同時刪除 stash 的內容

    • 多人協作(遠端倉庫分支管理)

      • git remote -v

        顯示遠端倉庫詳細資訊

        $ git remote -v
        origin  [email protected]:buxiaoxing/learngit.git (fetch)
        origin  [email protected]:buxiaoxing/learngit.git (push)
        

        fetch:抓取倉庫

        push:推送倉庫

      • 推送衝突

        1. git pull

          拉取遠端倉庫最新修改

          如果提示 no tracking information,則說明本地分支和遠端分支的連結關係沒有建立,用命令git branch --set-upstream-to=origin/dev dev

        2. 最新修改與本地修改有衝突,則手動修改

        3. 沒有衝突或解決衝突後,再用 git push origin dev 推送

    • Rebase

      挪動本地提交位置,把分叉的提交歷史“整理”成一條直線,看上去更直觀

      git rebase

  • 標籤

    釋出一個版本時,我們通常現在版本庫中打一個標籤(tag),這樣就唯一確定了打標籤時刻的版本,通過 commit 號也可以唯一標識,但 commit 號不便於記憶

    • git tag <tagname>

      git tag v1.0

      預設標籤是打到最新提交的 commit 上的

    • git tag <tagname> <commit id>

      將標籤打到指定 commit 上

      git tag -a v0.1 -m 'version 0.1 released' 1094adb

      -a 引數指定標籤名

      -m 引數指定說明文字

    • git tag

      檢視所有標籤

    • git show <tagname>

      檢視標籤具體資訊

    • git tag -d <tagname>

      刪除一個標籤

    • git push origin <tagname>

      建立的標籤都只會儲存到本地,不會自動推送到遠端,所以打錯的標籤可以在本地安全刪除

      將標籤推送到遠端

      git push origin --tags

      一次性推送全部尚未推送到遠端的本地標籤

    • 刪除遠端標籤

      git tag -a v0.9 先刪除本地的標籤

      git push origin :refs/tags/v0.9 刪除遠端標籤

  • 自定義 Git

    • 忽略特殊檔案

      有些時候必須把某些檔案放在 Git 工作目錄中,但又不能提交他們,比如儲存了資料庫密碼的配置檔案,但每次 git status 都會顯示 Untracked file …… ,看起來不舒服

      可以在Git工作區的根目錄下建立一個特殊的 .gitignore 檔案,然後把要忽略的檔名填進去

      # Windows:
      Thumbs.db
      ehthumbs.db
      Desktop.ini
      
      # Python:
      *.py[cod]
      *.so
      *.egg
      *.egg-info
      dist
      build
      
      # My configurations:
      db.ini
      deploy_key_rsa
      

      最後再將 .gitignore 檔案提交到 Git

    • 配置別名

      給命令配置別名

      buxiaoxing@buxiaoxing-PC MINGW64 /f/工具/git/git repository (master)
      $ git config --global alias.st status
      
      buxiaoxing@buxiaoxing-PC MINGW64 /f/工具/git/git repository (master)
      $ git st
      On branch master
      Your branch is up to date with 'gitee/master'.
      
      nothing to commit, working tree clean
      
      
    • 配置檔案

      • 配置Git的時候,加上--global是針對當前使用者起作用的,如果不加,那隻針對當前的倉庫起作用。

      • 配置檔案放哪了?每個倉庫的Git配置檔案都放在.git/config檔案中: