Вопрос или проблема
Я ищу bash-скрипт для генерации ссылки на файл в GitHub по имени файла в моей локальной копии.
Так что, если бы такой скрипт существовал и назывался github-link-for-file
, он мог бы работать так:
$ git clone [email protected]:torvalds/linux.git
$ cd linux
$ github-link-for-file include/math-emu/quad.h
https://github.com/torvalds/linux/blob/master/include/math-emu/quad.h
Я предполагаю, что такой скрипт уже существует, но я не могу его найти. Может, кто-нибудь другой сможет?
(Если нет, может быть, мне стоит его написать и добавить в проект вроде https://hub.github.com/. Похоже, их команда “git browse
” очень близка к тому, что я хочу.)
Это должно быть довольно просто. Попробуйте это:
#!/bin/bash
URL=`git config --get remote.origin.url | sed 's/\.git//g'`
BRANCH=`git rev-parse --abbrev-ref HEAD`
FILE=$1
echo $URL/blob/$BRANCH/$FILE
exit 0
Сохраните это в файл bash-скрипта и не забудьте установить права на выполнение с помощью chmod +x
.
Затем вы можете связать файл скрипта с псевдонимом или создать символическую ссылку в вашей директории /usr/bin
. Скрипт работает относительно, так что вам нужно находиться в директории репозитория, когда вы его запускаете.
Альтернативный вариант ответа Gsinti, который поддерживает удаленные репозитории, доступные через SSH
#!/bin/bash
GIT_URL=$(git config --local remote.origin.url | cut -d "@" -f 2 | cut -d "." -f "1-2" | sed "s/:/\//")
URL="https://${GIT_URL}"
BRANCH=`git rev-parse --abbrev-ref HEAD`
FILE=$1
echo $URL/blob/$BRANCH/$FILE
exit 0
из ai
#!/bin/bash
if [ -z "$1" ]; then
echo "Использование: $0 <имя_файла>"
exit 1
fi
filename=$1
if [ ! -f "$filename" ]; then
echo "Файл не найден: $filename"
exit 1
fi
remote_url=$(git config --get remote.origin.url)
if [ -z "$remote_url" ]; then
echo "URL удаленного репозитория не найден"
exit 1
fi
if [[ "$remote_url" == git@* ]]; then
http_url=$(echo "$remote_url" | sed -e 's/:/\//' -e 's/git@/https:\/\//' -e 's/\.git$//')
elif [[ "$remote_url" == http* ]]; then
http_url=$(echo "$remote_url" | sed -e 's/\.git$//')
else
echo "Неподдерживаемый формат URL удаленного репозитория"
exit 1
fi
relative_path=$(realpath --relative-to=$(git rev-parse --show-toplevel) "$filename")
branch_name=$(git rev-parse --abbrev-ref HEAD)
file_url="$http_url/blob/$branch_name/$relative_path"
echo "$file_url"
Ответ или решение
Как получить ссылку на файл в репозитории GitHub из локального клона через командную строку
Если вы хотите получить прямую ссылку на файл, который находится в вашем локальном клоне Git-репозитория на GitHub, вы можете воспользоваться простым скриптом на Bash. Этот скрипт поможет автономно генерировать ссылку на любой файл, исходя из его имени и текущего местоположения в репозитории.
Подготовка скрипта
Вот пример простого Bash-скрипта, который выполняет данную задачу:
#!/bin/bash
if [ -z "$1" ]; then
echo "Использование: $0 <имя_файла>"
exit 1
fi
filename=$1
if [ ! -f "$filename" ]; then
echo "Файл не найден: $filename"
exit 1
fi
remote_url=$(git config --get remote.origin.url)
if [ -z "$remote_url" ]; then
echo "Не удалось найти удалённый URL"
exit 1
fi
if [[ "$remote_url" == git@* ]]; then
http_url=$(echo "$remote_url" | sed -e 's/:/\//' -e 's/git@/https:\/\//' -e 's/\.git$//')
elif [[ "$remote_url" == http* ]]; then
http_url=$(echo "$remote_url" | sed -e 's/\.git$//')
else
echo "Неподдерживаемый формат удалённого URL"
exit 1
fi
relative_path=$(realpath --relative-to=$(git rev-parse --show-toplevel) "$filename")
branch_name=$(git rev-parse --abbrev-ref HEAD)
file_url="$http_url/blob/$branch_name/$relative_path"
echo "$file_url"
Как использовать скрипт
- Создание скрипта: Скопируйте код скрипта в файл, например, под названием
github-link-for-file.sh
. - Установка разрешений: Сделайте файл исполняемым, выполнив команду:
chmod +x github-link-for-file.sh
- Запуск скрипта: Перейдите в директорию вашего локального Git-репозитория и запустите скрипт с указанием имени файла:
./github-link-for-file.sh путь/к/вашему/файлу
Например:
./github-link-for-file.sh include/math-emu/quad.h
Описание работы скрипта
- Проверка аргументов: Скрипт сначала проверяет, был ли передан аргумент с именем файла. Если нет, выводится соответствующее сообщение.
- Проверка существования файла: Затем он проверяет, существует ли указанный файл в текущем репозитории.
- Получение удалённого URL: Скрипт извлекает URL удалённого репозитория с помощью команды
git config
. - Форматирование URL: В случае, если удалённый URL задан в формате SSH, он преобразуется в формат HTTPS для совместимости с GitHub.
- Получение относительного пути: Используя команду
realpath
, скрипт определяет относительный путь файла внутри репозитория. - Генерация ссылки: На финальном этапе формируется окончательная ссылка на файл в репозитории GitHub, которая выводится на экран.
Заключение
С помощью данного скрипта вы можете быстро генерировать ссылки на файлы в вашем репозитории GitHub, что может существенно упростить работу с документами и кодом. Сохраните этот скрипт в удобном для вас месте и используйте его в своих проектах. Это позволит вам не только сэкономить время, но и повысить продуктивность работы с вашими репозиториями.