получить ссылку GitHub на файл в checkout через командную строку

Вопрос или проблема

Я ищу 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"

Как использовать скрипт

  1. Создание скрипта: Скопируйте код скрипта в файл, например, под названием github-link-for-file.sh.
  2. Установка разрешений: Сделайте файл исполняемым, выполнив команду:
    chmod +x github-link-for-file.sh
  3. Запуск скрипта: Перейдите в директорию вашего локального 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, что может существенно упростить работу с документами и кодом. Сохраните этот скрипт в удобном для вас месте и используйте его в своих проектах. Это позволит вам не только сэкономить время, но и повысить продуктивность работы с вашими репозиториями.

Оцените материал
Добавить комментарий

Капча загружается...