git add --all 為啥不能添加空文件夾,這樣設計的初衷是?
這個算設計失誤吧,見
https://git.wiki.kernel.org/index.php/GitFaq#Can_I_add_empty_directories.3F
Currently the design of the git index (staging area) only permits files to be listed, and nobody competent enough to make the change to allow empty directories has cared enough about this situation to remedy it.
大概就是,有能力搞的人不關心,沒能力搞的人搞不動……
作者:Leedy
鏈接:http://www.zhihu.com/question/29811994/answer/45721540
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
大概是linus一開始就把快照設計成只有文件組成,后來想想要改太難,就算了吧。反正你們可以用假文件來占位(oh,so linux!),為什么要linus親自實現它。
現在的主流做法是在空文件夾里放置一個.gitkeep文件
加個.gitconfig文件在里面比較實用,也不會覺得突兀。雖然絕大多數時候這個文件也沒什么卵用。
一、前言
git add命令主要用於把我們要提交的文件的信息添加到索引庫中。當我們使用git commit時,git將依據索引庫中的內容來進行文件的提交。
二、基本
git add <path>表示 add to index only files created or modified and not those deleted
我通常是通過git add <path>的形式把我們<path>添加到索引庫中,<path>可以是文件也可以是目錄。
git不僅能判斷出<path>中,修改(不包括已刪除)的文件,還能判斷出新添的文件,並把它們的信息添加到索引庫中。
三、git add -u
git add -u 表示 add to index only files modified or deleted and not those created
git add -u [<path>]: 把<path>中所有tracked文件中被修改過或已刪除文件的信息添加到索引庫。它不會處理untracted的文件。
省略<path>表示.,即當前目錄。
四、git add -A
git add -A: [<path>]表示把<path>中所有tracked文件中被修改過或已刪除文件和所有untracted的文件信息添加到索引庫。
省略<path>表示.,即當前目錄。
五、git add -i
我們可以通過git add -i [<path>]命令查看<path>中被所有修改過或已刪除文件但沒有提交的文件,
並通過其revert子命令可以查看<path>中所有untracted的文件,同時進入一個子命令系統。
比如:
git add -i
staged unstaged path
1: +0/-0 nothing branch/t.txt
2: +0/-0 nothing branch/t2.txt
3: unchanged +1/-0 readme.txt
*** Commands ***
1: [s]tatus 2: [u]pdate 3: [r]evert 4: [a]dd untracked
5: [p]atch 6: [d]iff 7: [q]uit 8: [h]elp
What now>
這里的t.txt和t2.txt表示已經被執行了git add,待提交。即已經添加到索引庫中。
readme.txt表示已經處於tracked下,它被修改了,但是還沒有被執行了git add。即還沒添加到索引庫中。
5.1、revert子命令
可以通過git add -i的revert子命令(3: [r]evert)把已經添加到索引庫中的文件從索引庫中剔除。
(3: [r]evert)表示通過3或r或revert加回車執行該命令。執行該命令后,git會例出索引庫中的文件列表.
然后通過數字來選擇。輸入"1"表示git會例出索引庫中的文件列表中的第1個文件。
"1-15"表示git會例出索引庫中的文件列表中的第1個文件到第15個文件.回車將執行。
如果我們不輸入任何東西,直接回車,將結束revert子命令,返回git add -i的主命令行。
5.2、update子命令
可以通過update子命令(2: [u]pdate)把已經tracked的文件添加到索引庫中。其操作和revert子命令類似。
5.3、add untracked子命令
通過add untracked子命令(4: [a]dd untracked)可以把還沒被git管理的文件添加到索引庫中。其操作和revert子命令類似。
5.4、diff子命令
可以通過diff子命令(6: [d]iff)可以比較索引庫中文件和原版本的差異。其操作和revert子命令類似。
5.5、status子命令
status子命令(1: [s]tatus)功能上和git add -i相似
5.6、quit子命令
quit子命令(7: [q]uit)用於退出git add -i命令系統
六、幫助
我們可以通過git add -h命令來看git add命令的幫助文檔。
git add -h
usage: git add [options] [--] <filepattern>...
-n, --dry-run dry run
-v, --verbose be verbose
-i, --interactive interactive picking
-p, --patch select hunks interactively
-e, --edit edit current diff and apply
-f, --force allow adding otherwise ignored files
-u, --update update tracked files
-N, --intent-to-add record only the fact that the path will be added later
-A, --all add changes from all tracked and untracked files
--refresh don't add, only refresh the index
--ignore-errors just skip files which cannot be added because of errors
--ignore-missing check if - even missing - files are ignored in dry run
http://blog.csdn.net/hudashi/article/details/7664374