как отправить вывод Windows dir в git add - PullRequest
0 голосов
/ 02 июля 2018

Я хочу добавить какой-нибудь файл в папки и его подпапки со специальным шаблоном для обработки в командном файле.

Так что Я не могу использовать " git add --all " или ". " из-за моего шаблона файла. файлы в этих папках со временем будут меняться, поэтому я не могу использовать конкретный путь к файлу для их добавления. У меня есть команда, которая отлично работает в оболочке Linux (как показано ниже):

git ls-files /back/git-back | grep '\.SQL$' | xargs git add

Но, Я хочу команду для командной строки Windows . Я нашел что-то подобное, но это не сработало правильно.

dir /s /l /b *.SQL > git add

Большое спасибо заранее

1 Ответ

0 голосов
/ 02 июля 2018

проблема

Две проблемы здесь (как минимум):

  • Символ > в командах оболочки (обе в оболочке POSIX (то, что вы назвали «оболочкой Linux», ну да ладно, не будем отвлекаться) а в интерпретаторе команд Windows cmd.exe) означает перенаправить вывод в файл, , поэтому команда

     dir ... > git add
    

    написал бы вывод команды dir в файл с именем «git» в текущем каталоге.

    Правильный способ перенаправить вывод одной команды на вход другого (в обоих видах оболочек тоже) символ "труба", |. Но читайте вперед.

  • Команда git add не принимает список файлы для обновления в промежуточной области на своем стандартном входе, и при этом у этого нет никакой опции командной строки, чтобы включить это поведение.

    Следовательно, используя что-то вроде

    dir ... | git add
    

    все равно ничего не даст.

    "Трюк" с | xargs git add сработал для вас просто потому, что xargs ведет себя: он анализирует поступающие данные его входной поток, разбивает на него строки и затем запускает указанный команда (git add в этом случае) с теми линиями, переданными ей в качестве отдельных аргументов командной строки, то есть, если часть из этого

    git ls-files ... | ... | xargs git add
    
    Конвейер

    до генерации xargs git add 5 строк, последний звонок на git args, упорядоченный по xargs похож на

    git add line1 line2 line3 line4 line5
    

Решения

Сохраните в файл, затем выполните dir /f

Самый простой, я признаю, состоит в следующем:

  1. Сохранить вывод dir в файл.

  2. Создайте цикл над ним - вызывая git add для каждого элемента.

    Для этого используйте команду for с командной строкой /f аргумент - ищите раздел под названием «Итерация диапазона значений "в документах (Вы также можете просто запустить for /? и прочитать справку.

    Это позволило бы назначить именованную переменную по вашему выбору для каждого имени файла, прочитанного из файла по очереди и затем назовите git add на нем.

Использование git update-index

Более "жестким" решением является использование Git уровня сантехника команда git update-index (которая вызывается git add в конце), так как эта команда позволяет читать спецификации о том, как обновить промежуточную область из стандартного входного потока.

Предполагаемая проблема с этим подходом в том, что вам нужно постобработать вывод из dir, чтобы сделать его подходящим за то, что git update-index ожидает, и делает это в Язык сценариев cmd.exe будет бесполезным упражнением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...