управление версиями командной строки с Java, имеющей дело с большим количеством вложенных каталогов

Использование командной строки git с Java. В нашем проекте множество вложенных пакетов, что, конечно же, означает множество вложенных каталогов.

Ввод этих каталогов в командной строке становится PITA и кажется неизбежным для некоторых неповседневных операций, таких как «git rm». Особенно, когда я перемещаю вещи в Eclipse, мне нужно играть в догонялки в командной строке, но файлы больше не существуют (не могу использовать расширение оболочки или *). Кроме того, расширение оболочки не учитывает игнорируемые файлы, а отправка игнорируемых файлов команде git приводит к прерыванию команды (правильно). Не заинтересован в интеграции с IDE по причинам, выходящим за рамки этого вопроса.

Кто-нибудь думал, чтобы сделать это проще?

Я использую win7/powershell, но также открыт для предложений по использованию bash или пакетной обработки.


person Dustin Getz    schedule 26.01.2011    source источник
comment
Не знаю из головы. Но как насчет создания переменных среды для наиболее часто используемых местоположений?   -  person ring bearer    schedule 26.01.2011
comment
структура dir слишком глубокая, слишком много местоположений   -  person Dustin Getz    schedule 26.01.2011
comment
Должен признаться, я не слишком хорошо понимаю проблему - если вы удалили каталог и вам нужно синхронизировать его с git, вы можете просто выполнить git add -A topdir, и он рекурсивно удалит его из индекса. На самом деле вы можете просто сделать git add -A . и это приведет к синхронизации индекса с вашим рабочим каталогом ... это недостаточно избирательно?   -  person araqnid    schedule 26.01.2011


Ответы (6)


Не знаком с win7/powershell. Предполагая, что имена ваших классов уникальны, в bash вы можете найти файлы с

find . -name SomeFile.java

Затем вы можете "git rm" их с помощью

git rm $(find . -name SomeFile.java)

Конечно, если вы не хотите каждый раз вводить «find .-name», вы можете создать функцию в своем .bashrc, чтобы упростить это. Поддерживает ли powershell что-то подобное? Если нет, как насчет изучения cygwin, который позволяет запускать bash?

ОТРЕДАКТИРОВАНО

Если имена ваших классов не уникальны, этот подход не будет работать так хорошо.

person Clint Miller    schedule 26.01.2011
comment
Кроме того, какую IDE вы используете? Есть ли интеграция с git? - person Clint Miller; 26.01.2011

Я не использовал 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
        }
    }
}
person JasonMArcher    schedule 26.01.2011

Я не знал о git add -A — и после нескольких дней использования у меня не было такого сильного разочарования в пути. Доложит.

person Dustin Getz    schedule 28.01.2011

Если вы не хотите вводить все пути, вы можете использовать TortoiseGit и выполнять управление через графический интерфейс.

Мне также нравится использовать командную строку, но когда дело доходит до определенных случаев (например, одновременное восстановление 20 файлов), мне проще проверить файлы в диалоговом окне восстановления и просто нажать «ОК». Для меня TortoiseGit — это не замена консоли Git, а очень удобное ее расширение.

К сожалению, упомянутый вами вариант использования (одновременное удаление нескольких файлов) не может быть реализован с помощью TortoiseGit. Если бы мне нужно было удалить кучу файлов одновременно, я бы попросил git сообщить мне, какие файлы в настоящее время имеют версию (git ls-files), передайте этот список в файл, отредактируйте его, а затем выполните git rm для каждого файла, оставшегося в отредактированном файле.

person eckes    schedule 28.01.2011

Пробовали ли вы использовать EGit? Это не самый эффектный пользовательский интерфейс git, который вы когда-либо видели, но если вы уже используете eclipse, он облегчит некоторые вещи. Также приятно видеть маленькие мини-иконки в самом Eclipse, показывающие, какие файлы изменились, а какие нет.

person MatrixFrog    schedule 29.01.2011

Вы пробовали git gui с интерфейсом git? Обычно он поставляется с git и очень помогает быстро подготовить кучу файлов.

person ordnungswidrig    schedule 28.01.2011
comment
Я не думаю, что это возможно. Вы имеете в виду git gui? - person MatrixFrog; 30.01.2011