Можно ли настроить апстрим репозитория Git на локальный клон того же репозитория?

Можно ли настроить апстрим репозитория Git на локальный клон того же репозитория?

У меня есть один репозиторий в /home/user/reponame(Repo 1). Затем я клонировал этот репозиторий в /tmp/reponame(Repo 2). Возможно ли изменить вышестоящий репозиторий Repo 1 на Repo 2?

Другие вопросы, которые я видел, предлагают ветки, но это не то, что я ищу здесь. Когда я это делаю git checkout -b test --track /tmp/reponame/master, я получаю ошибку /tmp/reponame/master is outside repository.

решение1

Git не использует термин 'upstreams' для каких-либо настроек, охватывающих весь репозиторий. Только отдельные ветки имеют upstream в терминологии Git, и он может быть установлен только на какую-то другую ветку, поскольку его цель — быть сокращением/значением по умолчанию для таких команд, как git merge <otherbranch>. (Ваша git checkoutкоманда также полностью построена вокруг работы с ветками.)

Вместо этого вы, вероятно, ищете'пульты', которые хранят URL-адреса репозиториев. Каждый новый клон сохраняет свой исходный URL-адрес в удаленном репозитории с именем origin. Так что если вы хотите, чтобы репозиторий 1 мог отправлять данные в репозиторий 2, вы можете использовать git remote addили git remote set-url(в зависимости от того, существует ли уже удаленный репозиторий с таким именем):

git remote add origin /tmp/reponame
git fetch origin

Альтернативно:

git config remote.origin.url /tmp/reponame
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin

За этим часто следует обновление апстримов для каждой ветки, чтобы git pullвсе работало:

git branch --set-upstream-to="origin/master" master

Связанный контент