Создать работоспособность для клона GIT

git log --pretty=format:%aN | sort | uniq -c | sort -n

git log --pretty=format:%aNвыводит только имя автора для каждого коммита.sortсобирает все повторяющиеся имена вместе, затемuniq -cпревращает каждую серию одинаковых строк в количество повторений и значение перед sortчисловым значением. Вы можете взять последнюю строку (tail -n 1), чтобы найти наиболее продуктивную, отменить сортировку(sort -nr)по убыванию или сделать любую другую обработку, которая вам нравится.

-1
19.02.2020, 19:46
2 ответа

Общий подход

if command; then
    # Every went OK
else
    # Something failed
fi

и работает дляgit:

if git clone...; then
    # The repo was cloned correctly
else
    # Something failed
fi

Первая ветвь выполняется только в том случае, если команда git cloneзавершается со статусом 0, что указывает на успех; любой другой статус выхода считается ошибкой и приводит к выбору второй ветки.

2
28.04.2021, 23:22

С не -существующим файлом aи catвместо этого, если gitэто составляет что-то вроде:

]# e=$(cat a 2>&1 1>/dev/null)
]# echo ret=$? out=\"$e\"
ret=1 out="cat: a: No such file or directory"

Теперь у меня есть вывод команды , который представляет собой стандартный вывод cat, замененный на stderr, в качестве «результирующего» значения. Код возврата предоставляется бесплатно как $?.

Для сравнения успешныйcat:

]# e=$(cat atext 2>&1 1>/dev/null)
]# echo ret=$? out=\"$e\"
ret=0 out=""

-> Успешное перенаправление на null, пустое сообщение об ошибке.

]# e=$(cat atext)
]# echo ret=$? out=\"$e\"
ret=0 out="First line of a"

-> Успешно, поэтому "$e" содержит данные.


]# e=$(cat xxx 2>&1 1>/dev/null)
]# echo ret=$? out=\"$e\"
ret=1 out="cat: xxx: Is a directory"

-> Сообщение детализировано, но код выхода остается равным единице.

Да, у меня есть директория xxx:git clone.git xxx, только что сделанная для меня, когда я пытался спровоцировать определенную ошибку.

(Поэтому я переключился наcat)

]# e=$(cat -M 2>&1 1>/dev/null)
]# echo ret=$? out=\"$e\"
ret=1 out="cat: invalid option -- 'M' Try 'cat --help' for more information."
]# 

По-прежнему ret=1.


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

В моем примере я не должен жаловаться на единый код ошибки cat "1" или пытаться поймать и проанализировать сообщение в сложном сценарии (, который противоположен простой программе ). Я должен заранее проверить, все ли готово, и при необходимости сообщить пользователю (об ошибке или предупреждении ).

Интересно, какие коды ошибок вы получаете от git clone. Справочные страницы git очень мало говорят о кодах возврата. Так же, как vi, например. Очень непохоже на mount, чьи «коды можно объединить по ИЛИ».


Учитывая "небезопасную" команду git clone $dя могу добавить код ошибки в сообщение вместе с источником. Это интерактивный вкладыш -:

.
]# d='xxx'; git clone $d || echo "g. cl. failed with $?"
fatal: destination path 'xxx' already exists and is not an empty directory.
g. cl. failed with 128

Для сценария это не так очевидно; Я бы сделал так:

]#. gc.sh 
fatal: destination path 'xxx' already exists and is not an empty directory.
g. cl. failed with 128

Сcat gc.sh:

d='xxx'
git clone $d; ret=$?  
if (( $ret > 0 )) 
   then echo "g. cl. failed with $ret"
fi

В противном случае $?не остается достаточно свежим. И тест на true/false тоже явный.

1
28.04.2021, 23:22

Теги

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