Есть ли команда git, которая возвращает имя текущего проекта?

Есть ли у git встроенная команда для отображения имени текущего удаленного проекта? Сейчас я использую это:

git remote -v | head -n1 | awk '{print $2}' | sed 's/.*\///' | sed 's/\.git//'

... но похоже, что будет встроенный эквивалент.

Ответ 1

Похоже, ваш script тянет последнюю часть удаленного URL-адреса и использует это как имя проекта. Это работает при использовании одного удаленного сайта, такого как http://bitbucket.org, но ваша система не будет работать повсеместно для всех пользователей этого репозитория.

Пользователи, как правило, имеют разные удаленные репозитории, ведь на многих проектах у вас будет несколько пультов. Git не волнует, откуда приходит репозиторий при извлечении и слиянии. Алгоритм слияния даже примет ветки без общего предка.

Единственное реальное решение - создать текстовый файл в корне каждого репозитория, который содержит имя проекта. Это решение будет работать для всех пользователей, независимо от того, как они настраивают свои пульты.

Ответ 2

Я искал такую ​​же информацию, чтобы настроить приглашение моей оболочки, поэтому я решил попробовать и получил эту команду, которая выводит только название проекта:

    $ 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, поскольку проверка цепочки сертификатов. Это было просто для иллюстрации случаев использования.

Ответ 3

В Git нет имени проекта. Вы просто получаете имя папки, в которой расположен репозиторий удаленно. Git не имеет встроенного способа вычисления этого, поскольку он абсолютно бесполезен для него.

Ответ 4

Для имени удаленной папки было бы лучше

git remote -v | head -n1 | awk '{print $2}' | sed -e 's,.*:\(.*/\)\?,,' -e 's/\.git$//'

потому что это может быть git @something.com: repo_name - без косой черты.

Ответ 5

Команда 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% страхования.

Ответ 6

Я хотел бы указать на тот же ответ @Mike, упомянутый в комментариях к вашему вопросу, в файле $GIT_DIR/description. Некоторые другие программы используют это для имя репозитория, например, post-receive-email hook script. (Что на самом деле делает sed -ne '1p' "$GIT_DIR/description") и поэтому просто использует первую строку из этого файла в качестве имени репозитория.

Ответ 7

Удаленный URL-адрес или папка, в которой хранится репозиторий git, может иметь значение до git. Таким образом, у вас нет встроенного способа проверки этого. git не может определить, что такое название проекта. Вы должны (или владелец проекта). Обычно это будет в виде README или какого-либо подобного файла, помещенного в репозиторий, который дает название проекта.

Ответ 8

То, что вы делаете, прекрасно. Я не верю, что кто-то не изменит имя в файле readme. Используйте URL-адрес, как вы делаете. Примите решение о том, что происхождение всегда относится к центральному репо, в котором URL-адреса будут содержать идентификатор.