Есть ли команда git, которая возвращает имя текущего проекта? - PullRequest
26 голосов
/ 19 ноября 2011

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

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

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

Ответы [ 10 ]

19 голосов
/ 17 октября 2015

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

    $ 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##*/}

Примечание: GH не позволяет вам клонировать, используя IP напрямую по HTTPS из-за проверки цепочки сертификатов. Это было просто для иллюстрации вариантов использования.

13 голосов
/ 19 ноября 2011

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

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

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

5 голосов
/ 17 февраля 2013

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

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

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

4 голосов
/ 25 мая 2015

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

4 голосов
/ 19 ноября 2011

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

2 голосов
/ 03 апреля 2013

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

1 голос
/ 19 ноября 2011

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

0 голосов
/ 14 апреля 2019

Цепные head awk и sed такие звонки

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

можно объединить в один sed вызов, например:

git remote -v  | sed -rn '1s#.*/(.*)\.git.*#\1#p'
0 голосов
/ 14 апреля 2019
basename $(git config remote.origin.url |sed "s/\.git$//")
0 голосов
/ 19 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...