Как сделать git repo помнить все пульты?
У меня есть репозиторий git, являющийся fork другого репо. Как правило, я обычно добавляю удаленный вызов вверх по потоку, который является исходным репо, из которого я вило.
$ git remote -v
origin [email protected]:skela/awesomeproject.git (fetch)
origin [email protected]:skela/awesomeproject.git (push)
upstream git://github.com/bob/awesomeproject.git (fetch)
upstream git://github.com/bob/awesomeproject.git (push)
Есть ли способ, чтобы этот дополнительный удаленный упор сохранялся в клоне?
Скажем, я удаляю свой локальный репозиторий и делаю:
git clone [email protected]:skela/awesomeproject.git
И теперь я перепроверяю свои пульты:
$ git remote -v
origin [email protected]:skela/awesomeproject.git (fetch)
origin [email protected]:skela/awesomeproject.git (push)
Мой удаленный пульт удален!
Как я могу гарантировать, что мой репозиторий git всегда сохраняет эти 2 удаленных псевдонима?
Изменить:
Просто добавив основную причину, по которой я хочу сделать это, чтобы сформировать некоторые ответы по приемлемому пути;)
Цель состоит в том, чтобы иметь ветвь в моем репо, которая отслеживает ведущего мастера.
[remote "upstream"]
url = git://github.com/bob/awesomeproject.git
fetch = +refs/heads/*:refs/remotes/upstream/*
[branch "father"]
remote = upstream
merge = refs/heads/master
Другими словами, ветвь "отец", которая находится в моем репо, отслеживает удаленную вышестоящую ведущую ветвь.
Все отлично работает, как только я его установлю, но как только я снова клонирую репо, ветвь "отец" указывает на происхождение, а не вверх по течению.
Ответы
Ответ 1
Это невозможно. Git только клонирует содержимое репозитория, но не его настройки. Если вы хотите подключить пульты дистанционного управления к своему репо (возникает вопрос, является ли это хорошей идеей), создайте скрипт repo-setup.sh
в корне репо, который будет выполнять что-то вроде этого:
git remote rm origin
git remote rm upstream
git remote add origin [email protected]:skela/awesomeproject.git
git remote add upstream git://github.com/bob/awesomeproject.git
Затем запустите этот файл после того, как вы клонировали хранилище.
Ответ 2
Создайте файл .gitremotes, который вы заполняете содержимым .git/config, связанным с пультом. Добавить .gitremotes в репозиторий. После того, как клон добавит .git/config с .gitremotes. Примечание: может потребоваться некоторое редактирование руки, если удаленные объекты, которые вы хотите использовать (в .gitremotes), имеют конфликт имен с удаленным, который 'git clone' создается автоматически ('orgin').
Для этого вы можете определить функцию bash:
function git-clone-r ()
{
src=$1
tgt=$2
git clone $src $tgt
cat ${tgt}/.gitremotes >> ${tgt}/.git/config
}
[Вышеизложенное не все так сложно; но иллюстрирует точку и работы]
Ответ 3
Это немного измененная версия решения GoZoner.
Вам нужно записать информацию обо всех пультах из вашего репо .git/config
в файл, который вы могли бы хранить вне своего репозитория git. Вам также необходимо позаботиться об обновлении этого файла каждый раз, когда вы добавляете новый пульт. Фактически это можно добавить к вашему репозиторию git, так что следующий клон или pull принесут этот файл.
Начиная с git 1.7.10+
, git поддерживает включение внешних файлов конфигурации.
Итак, вы можете добавить следующие строки в свой репо .git/config
, чтобы включить внешний файл конфигурации, содержащий удаленную информацию:
[include]
path = /dir1/dir2/repo-remotes.gitinfo