Java的命令行版本控制 - 处理大量嵌套目录

时间:2011-01-26 18:19:14

标签: java git bash powershell batch-file

在Java中使用命令行git。我们的项目有很多嵌套包,当然这意味着很多嵌套目录。

在命令行上键入这些目录正在变成PITA,对于像“git rm”这样的非日常操作似乎是不可避免的。特别是当我在Eclipse中移动东西时,需要在命令行中进行追赶,但文件不再存在(不能使用shell扩展或*)。此外,shell扩展不会考虑被忽略的文件,将忽略的文件发送到git命令会导致命令中止(正确)。由于超出此问题范围的原因,对IDE集成不感兴趣。

任何人都有任何想法让这更容易吗?

我在使用win7 / powershell,但我也愿意接受使用bash或批处理的建议。

6 个答案:

答案 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中的小迷你图标显示哪些文件已经更改,哪些文件没有。