2012-01-11 72 views
1

我想通過終端中的管道傳遞一個參數作爲git命令,並且按照慣例,我不知道我在做什麼。在bash中通過管道傳遞參數

目前:git rm --cached folder/path | rm -rf folder/path | git commit -m '...'

我想不會有可能的話用的文件夾路徑重複自己在第二個命令,但我不知道如何從第一個命令得到folder/path

這是可能的,還是我在吠叫錯誤的樹?

+0

不會'folpath =「文件夾/路徑」; git rm --cached $ folpath | rm -rf $ folpath | git commit -m'...''工作? – DejanLekic 2012-01-11 18:55:50

+0

我認爲是這樣,但事實證明,我無法在同一行上運行commit命令,因爲它會導致lockfile錯誤。 – designermonkey 2012-01-11 19:06:23

回答

0

你不需要做管道。

rm folder/file 
git rm !$ 
git commit -m "your message" 

在bash中學習bang(!)運算符是非常值得的。再次指定漫長的道路並不是最好的。

對於大多數我的工作流程,我可以不用它:

rm path/to/unwanted/file 
git add -A # stages ALL changes in the work tree 
git commit -m "my message" 

如果我修復了以前提交其錯誤地補充說,我不希望文件,你可以修改該承諾通過將上述代碼片段中的最後一次提交更改爲

git commit --amend -C HEAD 

這將重用當前提交中的消息。

您可能希望包含git狀態的輸出以及您正在嘗試執行的操作。

+0

儘管它不完全是我想要做的(再次,試圖成爲一個聰明的屁股),但這是解決問題的更好方法。非常感謝Adam。 – designermonkey 2012-01-11 19:07:58

0

我認爲這應該工作:

param=/folder/path; git rm --cached $param | rm -rf $param | git commit -m '...' 

編輯:@pholser解決方案與unset去除環境變量使事情變得更清潔。這可以同時運行在一個subshell的命令:

(param=/folder/path; git rm --cached $param | rm -rf $param | git commit -m '...') 
0
x=/folder/path && git rm --cached $x | rm -rf $x | git commit -m '...' && unset x 
+0

'$ x'會保留第一個管道後面的值嗎? – 2012-01-12 00:49:14

0

你並不需要從索引中移除,並從文件系統分開,git rm設計做到既去除:

git rm -r folder/path 

由於既沒有從您嘗試的表單中讀取標準輸入,因此沒有任何管道連接到rmgit commit。您可以使用;分隔命令。