Как я могу определить URL, с которого изначально был клонирован локальный репозиторий Git? - PullRequest
3460 голосов
/ 03 ноября 2010

Я вытащил проект из GitHub несколько дней назад. С тех пор я обнаружил, что на GitHub есть несколько вилок, и я забыл отметить, какой из них я взял изначально. Как я могу определить, какие из тех вилок я вытащил?

Ответы [ 21 ]

10 голосов
/ 14 января 2018

Я никогда не могу вспомнить все параметры команд Git, поэтому я просто поместил псевдоним в файл ~/.gitconfig, который имеет для меня больший смысл, поэтому я могу его запомнить, и это приводит к меньшему количеству ввода:

[alias]
url = ls-remote --get-url

После перезагрузки терминала вы можете просто набрать:

> git url

Вот еще несколько моих часто используемых:

[alias]
cd = checkout
ls = branch
lsr = branch --remote
lst = describe --tags
8 голосов
/ 10 октября 2017

Я в основном использую:

git remote get-url origin

Работает для командной консоли Git Bash или командной консоли CMD в Windows. Тем не менее, он работает с версией 2.x Git.

8 голосов
/ 20 апреля 2013

Пульт дистанционного управления не может называться «источником», поэтому вот вариант:

remote=$(git config --get branch.master.remote)
url=$(git config --get remote.$remote.url)
basename=$(basename "$url" .git)
echo $basename

Или:

basename $(git config --get remote.$(git config --get branch.master.remote).url) .git

Для более полезных переменных есть:

$ git config -l
7 голосов
/ 16 ноября 2015

В дополнение к другим ответам: если пульт дистанционного управления по какой-либо причине был изменен и поэтому не отражает оригинальное происхождение, самая первая запись в reflog (т.е. последняя запись, отображаемая командойgit reflog) должен указывать, откуда изначально был клонирован репо.

например,

$ git reflog | tail -n 1
f34be46 HEAD@{0}: clone: from https://github.com/git/git
$

(Имейте в виду, что рефлог может быть очищен, поэтому это не гарантируется.)

7 голосов
/ 25 июня 2014

Чтобы получить IP-адрес / имя хоста origin

Для ssh:// хранилищ:

git ls-remote --get-url origin | cut -f 2 -d @ | cut -f 1 -d "/"

Для git:// хранилищ:

git ls-remote --get-url origin | cut -f 2 -d @ | cut -f 1 -d ":"
6 голосов
/ 01 февраля 2017

Простой способ - открыть файл .git/config:

cat .git/config

Для редактирования:

vim .git/config или

nano .git/config

6 голосов
/ 21 ноября 2015

С git remote show origin вы должны быть в каталоге проектов. Но если вы хотите определить URL-адреса откуда-либо еще Вы можете использовать:

cat <path2project>/.git/config | grep url

Если вам часто понадобится эта команда, вы можете определить псевдоним в .bashrc или .bash_profile с MacOS.

alias giturl='cat ./.git/config | grep url'

Так что вам просто нужно вызвать giturl в корневой папке Git, чтобы просто получить его URL.


Если вы расширите этот псевдоним, как это

alias giturl='cat .git/config | grep -i url | cut -d'=' -f 2'

вы получаете только простой URL без предшествующего

"URL ="

в

URL = http://example.com/repo.git

вы получаете больше возможностей в его использовании:

* +1032 * Пример * +1034 *

На Mac вы можете позвонить open $(giturl), чтобы открыть URL в стандартном браузере.

или chrome $(giturl), чтобы открыть его с помощью браузера Chrome в Linux.

5 голосов
/ 21 января 2013

Печать произвольно названных URL-адресов удаленной выборки:

git remote -v | grep fetch | awk '{print $2}'
4 голосов
/ 09 августа 2017

Если вы не знаете имя вышестоящего пульта для ветви, вы можете сначала посмотреть это, проверив имя вышестоящей ветки, на котором была построена текущая ветка.Используйте git rev-parse следующим образом:

git rev-parse --symbolic-full-name --abbrev-ref @{upstream}

Это показывает, что восходящая ветвь, которая была источником для текущей ветки.Это можно проанализировать, чтобы получить удаленное имя, например:

git rev-parse --symbolic-full-name --abbrev-ref @{upstream} | cut -d / -f 1

Теперь возьмите его и направьте на git ls-remote, и вы получите URL-адрес удаленного удаленного узла, являющегося источником текущей ветви:

git ls-remote --get-url \
  $(git rev-parse --symbolic-full-name --abbrev-ref @{upstream} | cut -d / -f 1)

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

3 голосов
/ 03 января 2018
#!/bin/bash

git-remote-url() {
 local rmt=$1; shift || { printf "Usage: git-remote-url [REMOTE]\n" >&2; return 1; }
 local url

 if ! git config --get remote.${rmt}.url &>/dev/null; then
  printf "%s\n" "Error: not a valid remote name" && return 1
  # Verify remote using 'git remote -v' command
 fi

 url=`git config --get remote.${rmt}.url`

 # Parse remote if local clone used SSH checkout
 [[ "$url" == git@* ]] \
 && { url="https://github.com/${url##*:}" >&2; }; \
 { url="${url%%.git}" >&2; };

 printf "%s\n" "$url"
}

Использование:

# Either launch a new terminal and copy `git-remote-url` into the current shell process, 
# or create a shell script and add it to the PATH to enable command invocation with bash.

# Create a local clone of your repo with SSH, or HTTPS
git clone git@github.com:your-username/your-repository.git
cd your-repository

git-remote-url origin

Вывод:

https://github.com/your-username/your-repository
...