在Java中使用命令行git。我们的项目有很多嵌套包,当然这意味着很多嵌套目录。
在命令行上键入这些目录正在变成PITA,对于像“git rm”这样的非日常操作似乎是不可避免的。特别是当我在Eclipse中移动东西时,需要在命令行中进行追赶,但文件不再存在(不能使用shell扩展或*)。此外,shell扩展不会考虑被忽略的文件,将忽略的文件发送到git命令会导致命令中止(正确)。由于超出此问题范围的原因,对IDE集成不感兴趣。
任何人都有任何想法让这更容易吗?
我在使用win7 / powershell,但我也愿意接受使用bash或批处理的建议。
答案 0 :(得分:1)
不熟悉win7 / powershell。假设您的类名是唯一的,在bash中您可以找到带有
的文件find . -name SomeFile.java
然后你可以用
“git rm”git rm $(find . -name SomeFile.java)
当然,如果你不想每次都输入“find。-name”,你可以在你的.bashrc中创建一个函数来简化它。 powershell是否支持类似的东西?如果没有,那么看看cygwin怎么样,允许你运行bash?
EDITED
如果您的班级名称不是唯一的,那么这种方法将无法正常运作。
答案 1 :(得分:1)
之前我没有使用过git,但我使用的是Perforce。我假设您需要引用许多目录,并且由于某种原因您不能使用通配符。然后在PowerShell中,您可以使用如下构造:
## Find all directories named "test*"
dir * -inc test* -r | ? {$_.PSIsContainer} | % {git <some command> $_.FullName}
## Find all files and directories named "test*.*"
dir * -inc test*.* -r | % {git <some command> $_.FullName}
您还可以编写一个包装函数来简化这一过程。这是让你入门的东西。
Function git {
param(
[Parameter(Position = 0, Mandatory = $true)]
[String]$Command
,
[Alias("PSPath")]
[Parameter(Position = 1, ValueFromPipelineByPropertyName = $true)]
[String[]]$Path
)
process {
if ($Path) {
$Path | {git.exe $Command $_}
} else {
git.exe $Command
}
}
}
答案 2 :(得分:1)
我不知道git add -A
- 在使用这几天后,我没有太多的路径挫折感。将报告回来。
答案 3 :(得分:0)
如果您想避免键入所有路径,可以使用TortoiseGit并通过GUI进行管理。
我也喜欢使用命令行,但是当遇到某些情况时(例如一次恢复20个文件),我发现在恢复对话框中检查文件更容易,只需单击确定。对我来说,TortoiseGit不是Git控制台的替代品,而是一个非常方便的扩展。
不幸的是,使用TortoiseGit无法实现您提到的用例(一次删除多个文件)。如果我不得不一次删除一堆文件,我会请git告诉我当前版本化了哪些文件(git ls-files
),将该列表导入文件,编辑它然后执行{{1}对于编辑文件中剩下的每个文件。
答案 4 :(得分:0)
你试过git前面的 git gui 吗?它通常带有git,对于快速播放大量文件非常有帮助。
答案 5 :(得分:0)
你试过EGit吗?它不是你见过的最壮观的git UI,但是如果你已经使用了eclipse,它会让事情变得更容易。很高兴看到Eclipse中的小迷你图标显示哪些文件已经更改,哪些文件没有。