Git忽略文件(.ignore)以及git status,git diff,git rm命令


git相關的其他命令

在之前的兩篇文章中簡單介紹了與git相關的基礎知識,如果想要熟練和快速運用git,還需要熟悉git的其他相關的命令。這一篇文章就是關於git的一些常用的“其它命令”


忽略文件

如果有不想要某些文件被納入git的管理,可以在git中忽略掉這些文件。這時,我們需要創建一個名為.gitignore的文件,在這個文件中寫入想要忽略的文件或文件類型。下面列出文件.gitignore的格式規范:

  • 所有空行或者以#開頭的行都會被Git忽略,相當於是注釋
  • 可以使用shell所使用的簡化了的正則表達式
  • 匹配模式可以以(/)開頭防止遞歸。
  • 匹配模式可以以(/)結尾指定目錄。
  • 要忽略指定模式以外的文件或目錄,可以在模式前加上驚嘆號(!)取反。

我們可以進行一個例子進行具體的展示,首先在之前的目錄的基礎上添加Text4.txt和Text5.txt以及Pictures和Videos文件夾,同時添加一個.gitignore文件

同時在Pictures文件夾中添加test文件夾和Test6.docx和Text7.txt。test文件夾中含有Test7.docx

這時可以查看狀態,可以看見:

所有新添加的文件都處於untracked的狀態,這時在.gitignore文件中添加如下:

# ignore all files in the Videos/ directory
# 忽視所有Videos文件夾中的文件
Videos/

# ignore .txt files(Regular Express)
# 忽視當前目錄下txt文件(正則表達式)
*.txt 

#ignore all txt files in Pictures directory,but not in Pictures/test directory
#忽視所有在Pictures目錄下的以txt為后綴的文件,但是不忽略Pictures/test下的
Pictures/*.txt

# ignore all docx files in Pictures directory,including Pictures/test
#忽視包含Pictures/test和Pictures/目錄下的所有以docx為后綴的文件
Pictures/**/*.docx

這時再查看當前文件的狀態,會發現所有被配置的文件都已經被忽略了。

注意:這里的文件都是處於未跟蹤狀態的文件,如果某個文件在暫存區或者倉庫區則在.gitignore文件中配置忽略無效
如果要忽略指定模式以外的文件或目錄,需要使用"!",在gitignore文件中添加以下內容:

#track Test4.txt,even though you're ignoring .txt files above
#這里忽視了除Test4.txt文件以外txt文件,即使在上面定義了忽視.txt文件 
!Test4.txt

還有一個需要注意的是如果當前目錄的子目錄中有同名的文件(包含后綴名)在此文件夾中寫文件名,這時會遞歸地將子目錄中的同名文件給忽視,如果不想忽視子目錄中的文件則需要加上"/"。在當前目錄中和Files目錄下分別添加Test6.md后,在.gitignore文件中添加如下內容:

#Only ignore Test6.md in the current directory,not subdir/Test6.md
#只是忽略當前目錄下的Test6.md而不是子目錄中Test6.md
/Test6.md

GitHub 有一個十分詳細的針對數十種項目及語言的 .gitignore 文件列表,你可以在 https://github.com/github/gitignore 找到它.

狀態簡覽

通常git status命令的輸出很詳細,如果想要得到更加簡單的形式的輸出,則需要使用命令git status -s
在當前文件夾中將Test4.txt和.gitignore文件使用git add添加到暫存區中,然后再在Test4.txt中添加內容,同時再向已經處於倉庫區中的Test1.md添加新內容,使用git status -s可以看到:

這時如果再使用git add將Test1.md和Test4.txt添加到暫存區,則顯示:

可以看出M的位置出現在了兩處,總結一下,出現在右邊的 M 表示該文件被修改了但是還沒放入暫存區,出現在靠左 邊的 M 表示該文件被修改了並放入了暫存區,新添加的未跟蹤文件前面有 ?? 標記,新添加到暫存區中的文件前面有 A 標記。

詳細查看修改的內容

使用git status可以查看到文件變化的地方,但是過於模糊,如果想要知道具體修改了什么地方,可以使用git diff的命令

  1. 查看已暫存和未暫存的修改,首先將所有文件添加到暫存區。

這個時候運行git diff命令可以看見沒有任何輸出,因為所有文件已暫存。
當在Test1.md文件新添加一行后,再使用git diff的命令:

因此要明白git diff比較的是已暫存和未暫存文件之間的區別。

  1. 查看已暫存的將要添加到下次提交里的內容,依然是將所有文件添加到暫存區

這時運行git diff --cached或者git diff --staged命令,會出現所有你已暫存起來的修改

因此git diff --cached或者git diff --staged命令便是查看已暫存的將要添加到下次提交里的內容

提交更新---將提交信息與命令放在同一行

可以在git commit命令之后添加 -m選項,這樣就可以將提交信息與命令放在同一行了.

可以所有更新的信息都會輸出

跳過使用暫存區域

每次提交之前都要使用git add將文件提交到暫存區,這樣略顯繁瑣,如果提交已經被git跟蹤過的文件,可以跳過將此文件添加到暫存區的步驟,如下提修改已經在倉庫區的Test4.txt,使用git commit -a命令可以直接提交Test4.txt到倉庫區。

移除文件

如果當要簡單刪除目錄中的文件時,可以手工在文件夾中刪除,也可以運行rm命令,比如:

rm Files/Test6.md

其狀態為:

此時可以看出這次的刪除操作並沒有記錄到git中,因此可以運行git rm命令

下次提交時候這個文件便不會再納入git的版本管理之中了。

如果一個文件已經存在於倉庫中,這時運行git rm 會在文件中直接刪除該文件並不會被納入git的管理中

但是如果一個文件在暫存區中,想要刪除則需要用強制刪除選項-f。不適用會報錯(這也是一種安全特性)比如下面的例子,Test4.txt已經在暫存區中

如果使用git rm -f則會強制刪除文件,如果使用git rm --cached則會在目錄中保留此文件,但是並不會讓git繼續跟蹤。

移動文件和重命名文件

如果要移動文件則直接使用rm命令,但是如果使用了git mv則結果會很不一樣,運行git mv readme.md readme相當於運行了三條命令:

mv readme.md readme
git rm readme.md
git add readme

比如下面的例子:運行git mv Test4.txt Test7.md結果狀態為:

因此,git rm命令將文件或文件夾重命名的文件,上面的例子就是將Test4.txt改名成了Test7.md


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM