2015-06-05 34 views
1

是否可以在例如git commit ".*my_file.*"中使用regular expressionsGit commit使用正則表達式或globes?

我試過了,它似乎只把它們解釋爲globs。我也厭倦了正則表達式標誌:

git commit -regex ".*my_file.*"` 

引發錯誤。

有誰知道一種將正則表達式與Git命令結合的方法嗎?

+0

@NickVolynkin,globs可以用於'git add'和'git commit',我只是不知道是否可以使用正則表達式,這對我來說會很棒。 – Candic3

+0

哦,沒錯。我在Git中找到了這個語法;從未見過它。 –

+1

也許你試圖添加未跟蹤的文件?從Git參考: 「通過將文件列出爲commit命令的參數,在這種情況下,提交將忽略在索引中執行的更改,而是記錄列出文件的當前內容**(必須已知Git ); **「 –

回答

1

不與Git本身。 Git只接收從shell傳來的文件列表,所以它將由shell執行文件的正則表達式匹配。我不認爲bash可以做到這一點,但其他shell可能會。

+0

Git也明白' - ',其中''可以是單引號字符串,包含球體(因此不會被shell擴展);這些小球可以用來選擇文件的一個子集來「添加」。例如:'git add - '* .el'將在當前和嵌套目錄中添加所有'.el'文件:globs作用於整個名稱,例如'find'中的'-wholename'。 – coredump

+0

@coredump:只有在當前目錄中沒有'.el'文件的情況下才有效,在這種情況下,shell不會擴展文件全局模​​式,而是將'* .el'文字傳遞給'git add',然後將它解釋爲模式規範。 – mipadi

+0

請看這個成績單:http://pastebin.com/KmejAU3i。它可以工作,即使當前目錄中有一個'.el'文件。擴展不是由shell完成的,因爲glob是引用的。 – coredump

0

我能想到的最好的方法是使用find命令。例如,如果你只想要Python文件:

find -type f -regex ".*\.py$" -exec git commit {} -m "committing only and all python files" \; 

誰能想到別人少笨重的東西嗎?

0

正如mipadi所提到的,shell可以生成參數以產生git的輸入。例如,ls可以組合使用。比方說,我有一個git的init-ED目錄中的以下文件:

.git/ 
my_new_project_file.py 
my_older_project_file.py 
some_other_file.py 

而且我想補充的一切,但some_other_file.py。要做到這一點:

ls my*project*.py | xargs git add 

檢查我的git status將表明,無論是my_new_project_file.pymy_older_project_file.py相繼上演,而some_other_file.py已被忽略。

n.b.ls不支持正則表達式;只是一團糟。

+0

這很酷,但git已經支持globbing:'git add「my * project * .py」'也一樣 – Candic3