Подтвердить что ты не робот

Как сделать 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

Другими словами, ветвь "отец", которая находится в моем репо, отслеживает удаленную вышестоящую ведущую ветвь.

Все отлично работает, как только я его установлю, но как только я снова клонирую репо, ветвь "отец" указывает на происхождение, а не вверх по течению.

4b9b3361

Ответ 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