Как получить git, производящий вывод в файл?

Я хотел записать вывод git clone в файл, используя

git clone https://github.com/someRepository > git_clone.file

Но вместо этого я получаю вывод, отображаемый / обновляемый в терминале, как

Cloning to 'someRepository' ...
remote: Counting objects: 2618, done.
remote: Compressing objects: 100% (14/14), done.
remote: Total 2618 (delta 2), reused 12 (delta 1), pack-reused 2603
Received objects: 100% (2618/2618), 258.95 MiB | 4.39 MiB/s, Done.
Resolving Differences auf: 100% (1058/1058), Done.
Check Connectivity ... Done.

Но файл git_clone.file генерируется, но остается пустым.

Моей первоначальной целью было обойти вывод git в функцию (см. мой вопрос здесь ). Но теперь я понял, что git, похоже, даже не производит вывод в stdout на самом деле, но как-то иначе, поскольку в файл ничего не записано.

Как получить этот отображаемый вывод из git, чтобы перенаправить его в файл / функцию?


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

Предложенное перенаправление stderrstdout) не решило проблему.

git clone https://github.com/someRepository 2> git_clone.file
git clone https://github.com/someRepository &> git_clone.file
git clone https://github.com/someRepository > git_clone.file > 2>&1

все дали мне один и тот же результат: только строка

Cloning to 'someRepository' ...

появляется в git_clone.file


ОБЩАЯ ИНФОРМАЦИЯ

Зачем мне это нужно?

Как объяснено в , мой другой вопрос здесь Я написал пользовательский индикатор выполнения всегда внизу вывода моих сценариев. (Я использую его в multible-скриптах, но) Скрипт в этом случае переносит множество (до сих пор 107) репозиториев git из github на наш собственный Gitlab-Server и восстанавливает поддержку Git LFS, которая обычно теряется без это.

Так что я хотел бы видеть все выходные данные git, но также хотел бы, чтобы мой индикатор выполнения работал в нижней части вывода в терминале.

2
задан 24 December 2017 в 01:55

2 ответа

Спасибо за вашу помощь!


Я только что нашел решение:

Часть 1

(Благодаря ответу на десерт ])
git по замыслу никогда не пишет в stdout, но stderr. Поэтому мне нужно было также перенаправить stderr, чтобы получить вывод, используя

git clone XYZ &> git_clone.file

Часть 2

В любом случае этого было недостаточно, и я получил только «неинтересную» часть вывода в файл, но не строки прогресса, который я действительно хотел.

Повторно выполняя повторную попытку в man git-clone Я понял, что существует опция

--progress
        progress status is reported on the standard error stream by 
        default when it is attached to a terminal, unless -q is 
        specified. This flag forces progress status even if the standard 
        error stream is not directed to a terminal.

Хотя я думаю, что на самом деле она уже была подключена к терминалу, теперь это кажется наконец, заставьте git записать строки части прогресса, которые меня больше всего интересуют, в stderr, чтобы я мог теперь получить их, используя

git clone --progress XYZ &> git_clone.file
5
ответ дан 24 December 2017 в 01:55

git clone использует stderr для вывода, поэтому просто напишите , что , в файл:

git clone https://github.com/someRepository 2>git_clone.file

В качестве альтернативы вы можете перенаправить stdout и stderr - в этом нет необходимости, но таким образом вы гарантируете, что каждый вывод, созданный командой, перенаправляется:

git clone https://github.com/someRepository &>git_clone.file

В случае git clone, очевидно, есть другой вывод, если вы перенаправите его, вся информация о ходе выполнения, проходящая через терминал, не будет включена в выходной файл. Это по своему замыслу и IIRC, вы не можете легко изменить это поведение напрямую, однако , , если вам нужен вывод в другом скрипте, вы можете очень хорошо направить его к нему, который работает просто отлично и дает вам весь вывод:

git clone https://github.com/someRepository | cat

Внутри вашего скрипта вы можете получить stdin с помощью -, например cat - для печати с stdin по stdout - см. Здесь для получения дополнительной информации: Как написать сценарий, который принимает ввод из файла или из стандартного ввода? и Как читать из файла или STDIN в Баш? .

1
ответ дан 24 December 2017 в 01:55

Другие вопросы по тегам:

Похожие вопросы: