Пульт по умолчанию для git fetch
Если я нахожусь в локальной ветке, которая не отслеживает удаленные ветки, и я даю команду
git fetch
Учитывая, что у меня есть несколько пультов, определенных в $GIT_DIR/config
, из которых удаляется извлечение?
Я попытался выяснить из man page, но этот момент мне неясен.
Дополнительно: как я могу изменить этот пульт по умолчанию без отслеживания локального ветки?
Ответы
Ответ 1
Если у вас несколько удаленных репозиториев и не указывается имя удаленного репозитория, по умолчанию будет использоваться origin
. Если нет удаленного репозитория с именем origin, то он будет ошибочно говорить
fatal: No remote repository specified. Please, specify either a URL or a
remote name from which new revisions should be fetched.
Дополнительно: как я могу изменить этот пульт по умолчанию без отслеживания локального ветки?
Вы можете переименовать это имя репозитория в 'origin', чтобы сделать его по умолчанию.
Осторожно: это не будет работать, если текущая ветка уже имеет восходящий поток, указанный на другом пульте. Из git help fetch
: "Если не указано ни одного удаленного устройства, по умолчанию используется пусковой источник, если только ветвь восходящего потока не настроена для текущей ветки". В этом случае вы можете изменить ветки восходящего потока, чтобы использовать origin
, отредактировав поля remote
для веток, настроенных в .git/config
.
Ответ 2
Будет извлечен пусковой источник. Это пульт frist, который вы выполнили
GIT clone
.
Ответ 3
В папке проекта при инициализации git на первом этапе создается папка .git.
Посмотрите на эту папку для файла с именем config, она содержит всю информацию о филиале. origin используется по умолчанию.
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = [email protected]:project.git
Таким образом, код извлекается из URL-адреса, указанного здесь.
Ответ 4
Вот некоторые псевдонимы, которые будут давать строки, которые могут быть использованы программно:
branch-name = "symbolic-ref --short HEAD" # https://stackoverflow.com/a/19585361/5353461
branch-remote-fetch = !"branch=$(git branch-name \"$1\") && git config branch.\"$branch\".remote || echo origin #"
branch-remote-push = !"branch=$(git branch-name \"$1\") && git config branch.\"$branch\".pushRemote || git config remote.pushDefault || git branch-remote-fetch #"
branch-url-fetch = !"remote=$(git branch-remote-fetch \"$1\") && git remote get-url \"$remote\" #" # cognizant of insteadOf
branch-url-push = !"remote=$(git branch-remote-push \"$1\") && git remote get-url --push \"$remote\" #" # cognizant of pushInsteadOf
Если вы хотите найти удаленный доступ для другого ветки, замените branch-name
выше следующим: разрешите передавать один аргумент:
branch-current = "symbolic-ref --short HEAD" # https://stackoverflow.com/a/19585361/5353461
branch-names = !"[ -z \"$1\" ] && git branch-current 2>/dev/null || git branch --format='%(refname:short)' --contains \"${1:-HEAD}\" #" # https://stackoverflow.com/a/19585361/5353461
branch-name = !"br=$(git branch-names \"$1\") && case \"$br\" in *$'\\n'*) printf \"Multiple branches:\\n%s\" \"$br\">&2; exit 1;; esac; echo \"$br\" #"