2013-06-05 11 views
3

所以让我们想象一下,我在临时区域的一些文件,像这样:在git的staging/commit区域中使用文件做东西而不使用完整路径的方法?

# modified: application/controllers/controller.php 
# modified: application/views/protected_views/some_view.php 
# modified: less/style.less 

所以,如果我想对刚Controller.php这样我需要运行这个命令例子观点DIFF:

# git diff application/controllers/controller.php 

我不知道是否是一种方式(也许有一些选项可以通过)告诉git只在临时区域查找文件?所以,我可以运行类似:

# git diff controller.php 

所以即使是在当前目录中没有Controller.php这样的文件,它会找出存在名为Controller.php这样在临时区域文件,它会自动做一些魔术在后台并访问正确的文件?显然,如果存在两个同名的文件,则可能会出现这种情况,那么显然会需要全部/部分路径。

所以简而言之:有没有办法在没有输入文件的完整路径的情况下使用分步文件做git的东西?

回答

0

我能想到做你想做的事情的唯一方法是在文件所在的目录中。在你的例子中,如果你在PROJECT/application/controllers/,那么git diff controller.php会像你期望的那样工作。

+0

是的,但在这种情况下,我需要保持CDing的目录,这是更多的工作。我希望有一种懒惰的方式,只要输入文件名,就可以从任何目录中的任何给定的分阶段文件中做东西。 – galdikas

+0

不幸的是,真的没有懒惰的方式来做到这一点。也许shell选项卡完成或文本编辑器=> git集成将让你想要你想要的。如果你使用vim,[fugitive](https://github.com/tpope/vim-fugitive)可能会让你的懒惰欲望 –

1

如果你只是想diff的正在上演的所有文件,并没有表现出其他方面的差异:如果你想diff的只有一个文件

git diff --staged 

git diff -- full/path/to/file 

把分差有所有文件特定名称(不管目录):

git ls-files | grep filename | xargs git diff -- 
0
git diff `find . -name controller.php` 

请注意,这依赖于工作树中的控制器(而不是索引/缓存/分段区),因为find不知道git - 所以@cforbish的答案在这方面更好。

实际上,建立在@ cforbish的答案,一个*可以为ls-files匹配任何路径(或片段):

git diff `git ls-files */controller.php` 
git diff `git ls-files *troll*` 
相关问题