Есть ли у git встроенная команда для отображения имени текущего удаленного проекта? Сейчас я использую это:
git remote -v | head -n1 | awk '{print $2}' | sed 's/.*\///' | sed 's/\.git//'
... но похоже, что будет встроенный эквивалент.
Есть ли у git встроенная команда для отображения имени текущего удаленного проекта? Сейчас я использую это:
git remote -v | head -n1 | awk '{print $2}' | sed 's/.*\///' | sed 's/\.git//'
... но похоже, что будет встроенный эквивалент.
Похоже, ваш script тянет последнюю часть удаленного URL-адреса и использует это как имя проекта. Это работает при использовании одного удаленного сайта, такого как http://bitbucket.org, но ваша система не будет работать повсеместно для всех пользователей этого репозитория.
Пользователи, как правило, имеют разные удаленные репозитории, ведь на многих проектах у вас будет несколько пультов. Git не волнует, откуда приходит репозиторий при извлечении и слиянии. Алгоритм слияния даже примет ветки без общего предка.
Единственное реальное решение - создать текстовый файл в корне каждого репозитория, который содержит имя проекта. Это решение будет работать для всех пользователей, независимо от того, как они настраивают свои пульты.
Я искал такую же информацию, чтобы настроить приглашение моей оболочки, поэтому я решил попробовать и получил эту команду, которая выводит только название проекта:
$ git config --local remote.origin.url|sed -n 's#.*/\([^.]*\)\.git#\1#p'
Он должен работать в любом случае, если ваш удаленный исходный URL-адрес - SSH, HTTPS с DNS или IP.
Если у вас нет удаленного доступа, только локальный репозиторий и папка верхнего уровня - это название проекта, в котором вы можете использовать git rev-parse и basename внутри дерева git (не надежное решение). Он выведет название проекта:
TOP=$(git rev-parse --show-toplevel); echo ${TOP##*/}
NB: GH не позволяет вам клонировать, используя IP непосредственно на HTTPS, поскольку проверка цепочки сертификатов. Это было просто для иллюстрации случаев использования.
В Git нет имени проекта. Вы просто получаете имя папки, в которой расположен репозиторий удаленно. Git не имеет встроенного способа вычисления этого, поскольку он абсолютно бесполезен для него.
Для имени удаленной папки было бы лучше
git remote -v | head -n1 | awk '{print $2}' | sed -e 's,.*:\(.*/\)\?,,' -e 's/\.git$//'
потому что это может быть git @something.com: repo_name - без косой черты.
Команда git remote -v
не может считаться надежной, поскольку ваш репозиторий может работать с несколькими удаленными репозиториями. Например, ваш проект your-project
, и вы добавили another-project
. После команды вы ожидаете увидеть название своего проекта, но вы увидите название другого проекта:
$ git remote -v | head -n1
ABC https://git.team1.ourcompany.com/another-project.git (fetch)
ABC https://git.team1.ourcompany.com/another-project.git (push)
origin https://git.ourcompany.com/your-project.git (fetch)
origin https://git.ourcompany.com/your-project.git (push)
Я мог бы предложить проверить вашу конфигурацию репозитория, например:
$ git config --local remote.origin.url
https://git.ourcompany.com/your-project.git
В первом подходе это более надежный, но не дает 100% страхования.
Я хотел бы указать на тот же ответ @Mike, упомянутый в комментариях к вашему вопросу, в файле $GIT_DIR/description
. Некоторые другие программы используют это для имя репозитория, например, post-receive-email hook script. (Что на самом деле делает sed -ne '1p' "$GIT_DIR/description"
) и поэтому просто использует первую строку из этого файла в качестве имени репозитория.
Удаленный URL-адрес или папка, в которой хранится репозиторий git, может иметь значение до git. Таким образом, у вас нет встроенного способа проверки этого. git не может определить, что такое название проекта. Вы должны (или владелец проекта). Обычно это будет в виде README или какого-либо подобного файла, помещенного в репозиторий, который дает название проекта.
То, что вы делаете, прекрасно. Я не верю, что кто-то не изменит имя в файле readme. Используйте URL-адрес, как вы делаете. Примите решение о том, что происхождение всегда относится к центральному репо, в котором URL-адреса будут содержать идентификатор.