1. 程式人生 > 實用技巧 >DOM事件

DOM事件

Git是什麼?

git是一個版本控制系統。其它的版本控制系統:CVS、Subversion (SVN)或 Perforce。

git的三種狀態

已提交(committed)、已修改(modified)和已暫存(staged)。

  • 已修改表示修改了檔案,但還沒儲存到資料庫中。

  • 已暫存表示對一個已修改檔案的當前版本做了標記,使之包含在下次提交的快照中。

  • 已提交表示資料已經安全地儲存在本地資料庫中。

這會讓我們的 Git 專案擁有三個階段:工作區、暫存區以及 Git 目錄。

工作區是對專案的某個版本獨立提取出來的內容。 這些從 Git 倉庫的壓縮資料庫中提取出來的檔案,放在磁碟上供你使用或修改。

暫存區是一個檔案,儲存了下次將要提交的檔案列表資訊,一般在 Git 倉庫目錄中。 按照 Git 的術語叫做“索引”,不過一般說法還是叫“暫存區”。

Git 倉庫目錄是 Git 用來儲存專案的元資料和物件資料庫的地方。 這是 Git 中最重要的部分,從其它計算機克隆倉庫時,複製的就是這裡的資料。

基本的 Git 工作流程如下:

  1. 在工作區中修改檔案。

  2. 將你想要下次提交的更改選擇性地暫存,這樣只會將更改的部分新增到暫存區。

  3. 提交更新,找到暫存區的檔案,將快照永久性儲存到 Git 目錄。

如果 Git 目錄中儲存著特定版本的檔案,就屬於已提交狀態。 如果檔案已修改並放入暫存區,就屬於已暫存

狀態。 如果自上次檢出後,作了修改但還沒有放到暫存區域,就是已修改狀態。

初次執行Git前的配置

Git 自帶一個git config的工具來幫助設定控制 Git 外觀和行為的配置變數。 這些變數儲存在三個不同的位置:
  1. /etc/gitconfig檔案: 包含系統上每一個使用者及他們倉庫的通用配置。 如果在執行git config時帶上--system選項,那麼它就會讀寫該檔案中的配置變數。 (由於它是系統配置檔案,因此你需要管理員或超級使用者許可權來修改它。)
  2. ~/.gitconfig~/.config/git/config檔案:只針對當前使用者。 你可以傳遞--global選項讓 Git 讀寫此檔案,這會對你係統上所有
    的倉庫生效。
  3. 當前使用倉庫的 Git 目錄中的config檔案(即.git/config):針對該倉庫。 你可以傳遞--local選項讓 Git 強制讀寫此檔案,雖然預設情況下用的就是它。。 (當然,你需要進入某個 Git 倉庫中才能讓該選項生效。)
每一個級別會覆蓋上一級別的配置,所以.git/config的配置變數會覆蓋/etc/gitconfig中的配置變數。檢視所用配置及他們所在的資料夾

git config --list --show-origin

git config --list(檢查配置資訊)

使用者資訊

安裝完 Git 之後,要做的第一件事就是設定你的使用者名稱和郵件地址。 這一點很重要,因為每一個 Git 提交都會使用這些資訊,它們會寫入到你的每一次提交中,不可更改:

git config --global user.name

git config --global user.email

如果使用了--global選項,那麼該命令只需要執行一次,因為之後無論你在該系統上做任何事情,Git 都會使用那些資訊。當你想針對特定專案使用不同的使用者名稱稱與郵件地址時,可以在那個專案目錄下執行沒有--global選項的命令來配置。

文字編輯器

如果想使用不同的文字編輯器,例如Emacs:

git config --global core.editor emacs

git config<key> :檢查Git的某一項配置

獲取幫助

git help <verb>

git <verb> --help

man git-<verb>

獲得git config命令的手冊,執行:

git help config

獲取Git

獲取Git倉庫:
  1. 將尚未進行版本控制的本地目錄轉換為 Git 倉庫;

  2. 從其它伺服器克隆一個已存在的 Git 倉庫。

在已存在目錄中初始化倉庫

如果有一個尚未進行版本控制的專案目錄,想要用Git來控制它,首先要進入該專案目錄

在Linux上: cd /home/user/my_project

在macOs上:cd /Users/user/my_project

在windows上: cd /c/user/my_project

之後執行:git init

該命令將建立一個名為.git的子目錄,這個子目錄含有你初始化的 Git 倉庫中所有的必須檔案,這些檔案是 Git 倉庫的骨幹。 但是,在這個時候,我們僅僅是做了一個初始化的操作,你的專案裡的檔案還沒有被跟蹤。

如果在一個已存在檔案的資料夾(而非空資料夾)中進行版本控制,你應該開始追蹤這些檔案並進行初始提交。 可以通過git add命令來指定所需的檔案來進行追蹤,然後執行git commit

git add *.c

git add LICENSE

git commit -m 'initial project version'


克隆現有的倉庫

git clone https://github.com/libgit2/libgit2

記錄每次更新到倉庫

每一個檔案的兩種狀態:已跟蹤或未跟蹤。

檢查當前檔案狀態

git status

如果顯示為

則所有已跟蹤檔案在上次提交後都未被更改過,也說明當前目錄下沒有出現任何處於未跟蹤狀態的新檔案,否則 Git 會在這裡列出來。

跟蹤新檔案

git add

只要在Changes to be committed這行下面的,就說明是已暫存狀態。 如果此時提交,那麼該檔案在你執行git add時的版本將被留存在後續的歷史記錄中。

暫存已修改的檔案

如果修改了一個的已被跟蹤的檔案,然後執行git status命令,會看到下面內容

只要在Changes not staged commit這行下面的,說明已跟蹤檔案的內容發生了變化,但還沒有放到暫存區。 要暫存這次更新,需要執行git add命令。這是個多功能命令:可以用它開始跟蹤新檔案,或者把

已跟蹤的檔案放到暫存區,還能用於合併時把有衝突的檔案標記為已解決狀態等。

狀態簡覽

git status -s

git status --short

??:新新增的未跟蹤檔案

A:新新增到暫存區中的檔案

M:修改過的檔案前面有標記

忽略檔案

建立一個名為.gitignore的檔案,列出要忽略的檔案的模式。

*. Git 忽略所有以.o.a結尾的檔案。一般這類物件檔案和存檔檔案都是編譯過程中出現的。*~ Git 忽略所有名字以波浪符(~)結尾的檔案,許多文字編輯軟體(比如 Emacs)都用這樣的檔名儲存副本。 此外,你

可能還需要忽略 log,tmp 或者 pid 目錄,以及自動生成的文件等等。

檔案.gitignore的格式規範:

  • 所有空行或者以#開頭的行都會被 Git 忽略。

  • 可以使用標準的 glob 模式匹配,它會遞迴地應用在整個工作區中。

  • 匹配模式可以以(/)開頭防止遞迴。

  • 匹配模式可以以(/)結尾指定目錄。

  • 要忽略指定模式以外的檔案或目錄,可以在模式前加上歎號(!)取反。

檢視已暫存和未暫存的修改

git diff

此命令比較的是工作目錄中當前檔案和暫存區域快照之間的差異。 也就是修改之後還沒有暫存起來的變化內容

git diff --staged

此命令是檢視已暫存的將要新增到下次提交裡的內容,這條命令將比對已暫存檔案與最後一次提交的檔案差異

提交更新

每次準備提交前,先用git status看下,你所需要的檔案是不是都已暫存起來了, 然後再執行提交命令

git commit

這樣會啟動你選擇的文字編輯器來輸入提交說明,編輯器會顯示類似下面的文字資訊:

更詳細的內容修改提示可以用git commit-v選項檢視,這會將你所作的更改的 diff 輸出呈現在編輯器中,以便讓你知道本次提交具體作出哪些修改。

你也可以在commit命令後新增-m選項,將提交資訊與命令放在同一行,如下所示

跳過使用暫存區域

git commit-a

Git 就會自動把所有已經跟蹤過的檔案暫存起來一併提交,從而跳過git add步驟

移除檔案

git rm

要從 Git 中移除某個檔案,就必須要從已跟蹤檔案清單中移除(確切地說,是從暫存區域移除),然後提交。 可以用git rm命令完成此項工作,並連帶從工作目錄中刪除指定的檔案,這樣以後就不會出現在未跟蹤檔案清單中了。

如果只是簡單地從工作目錄中手工刪除檔案,執行git status時就會在 “Changes not staged for commit” 部分(也就是未暫存清單)看到:

然後再執行git rm記錄此次移除檔案的操作:

刪除之前修改過或已經放到暫存區的檔案

git rm -f

讓檔案保留在磁碟,但是並不想讓 Git 繼續跟蹤

git rm --cached

移動檔案

git mv

其實,執行git mv就相當於運行了下面三條命令:

檢視提交歷史

git log

不傳入任何引數的預設情況下,git log會按時間先後順序列出所有的提交,最近的更新排在最上面。 正如你所看到的,這個命令會列出每個提交的 SHA-1 校驗和、作者的名字和電子郵件地址、提交時間以及提交說明。

git log -p--patch 顯示每次提交所引入的差異(按補丁的格式輸出)

git log -p-2(顯示最近的兩次提交)

git log --stat提交的簡略統計資訊

git log --pretty=format:"%h - %an, %ar : %s" 可以定製記錄的顯示格式。 這樣的輸出對後期提取分析格外有用——因為你知道輸出的格式不會隨著 Git 的更新而發生改變:

onelineformat與另一個log選項--graph結合使用時尤其有用 這個選項添加了一些 ASCII 字串來形象地展示你的分支、合併歷史

限制輸出長度

git log --since=2.weeks

還可以過濾出匹配指定條件的提交。 用--author選項顯示指定作者的提交,用--grep選項搜尋提交說明中的關鍵字。

git log -S 它接受一個字串引數,並且只會顯示那些新增或刪除了該字串的提交

撤消操作

有時候我們提交完了才發現漏掉了幾個檔案沒有新增,或者提交資訊寫錯了。 此時,可以執行帶有--amend選項的提交命令來重新提交:

git commit --amend將暫存區中的檔案提交。 如果自上次提交以來你還未做任何修改(例如,在上次提交後馬上執行了此命令),那麼快照會保持不變,而你所修改的只是提交資訊。

取消暫存的檔案

git reset

撤消對檔案的修改

git checkout

遠端倉庫的使用

檢視遠端倉庫

git remote

git remote -v顯示需要讀寫遠端倉庫使用的 Git 儲存的簡寫與其對應的 URL如果你的遠端倉庫不止一個,該命令會將它們全部列出。

新增遠端倉庫

git remote add <shortname> <url>

從遠端倉庫中抓取與拉取

git fetch <remote>

推送到遠端倉庫

git push origin master

檢視某個遠端倉庫

git remote show origin

遠端倉庫的重新命名與移除

git remote rename

git remote remove paul