2012-01-11 74 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。您可以使用;分隔命令。