не работает git push - что я делаю не так? - PullRequest
3 голосов
/ 07 июля 2011

Конфигурирование и работа с git локально, кажется, работает нормально:

~/sb> mkdir proj1
~/sb> cd proj1
~/sb/proj1> echo "asdf" > file1.txt
~/sb/proj1> git init
~/sb/proj1> git add .
~/sb/proj1> git commit -a -m "Import"
~/sb/proj1> git branch
* master

Проблема начинается, когда я пытаюсь отправить это в центральный репозиторий:

~/sb/proj1> cd /home
~> mkdir temp-repo
~> cd temp-repo/
~/temp-repo> git init --bare
Initialized empty Git repository in /home/temp-repo/
~/temp-repo> cd ~/sb/proj1/
~/sb/proj1> git clone /home/temp-repo/
Cloning into temp-repo...
done.
warning: You appear to have cloned an empty repository.
~/sb/proj1> git push origin master
fatal: 'origin' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

Примечание: --bare и origin master выше были взяты из решения проблемы, опубликованной здесь: отправка в хранилище git не работает

Тем не менее, я не понимаю, чего мне не хватает. Должно быть что-то тривиальное, но что это?

ОБНОВЛЕНИЕ: Ответ @Firoze Lafeer ниже работает:

~/sb/proj1> cd /home
~> mkdir temp-repo
~> cd temp-repo/
~/temp-repo> git init --bare
Initialized empty Git repository in /home/temp-repo/
~/temp-repo> cd ~/sb/proj1/
~/sb/proj1> git remote add origin /home/temp-repo
~/sb/proj1> git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 230 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /home/temp-repo
 * [new branch]      master -> master
~/sb/proj1>

Теперь мне нужно понять, почему. В частности, что я неправильно понял в этом ответе , который предлагает сделать git clone до git push origin master.

1 Ответ

5 голосов
/ 07 июля 2011

Когда вы сделали:

 git clone /home/temp-repo/

теперь у вас должен быть клон репо в новом каталоге ~ / sb / proj1 / temp-repo /

Если я правильно понимаю ваш вопрос, это не то, что вы хотели.

Если у вас уже есть хранилище в ~ / sb / proj1, не клонируйте другое хранилище. Просто добавьте другой как удаленный.

Итак, предположим, что вы сначала создали локальное репо в ~ / sb / proj1, а затем создали временное репо и хотите перейти с первого на второе:

git remote add origin /home/temp-repo
git push origin master

Или просто сделай это наоборот. Сначала сделайте репо в / home / temp-repo, а затем клонируйте его и нажмите на него.

Надеюсь, это поможет?

редактировать

Надеюсь, что дальше объясним, почему здесь не нужен клон:

Клон в том случае, если вы еще не создали локальный репозиторий. Таким образом, вы просите git скопировать некоторый удаленный репозиторий, который затем неявно устанавливает его как удаленный с именем 'origin' в новой локальной копии. В вашем случае у вас уже было локальное репо, поэтому все, что вам нужно, это установить другое репо в качестве удаленного, называемого «происхождение».

Так что теперь ваше локальное репо знает о другом репо, называемом «происхождение». И тогда вы можете подтолкнуть к этому «происхождению». Вы не должны называть это «происхождением», конечно, вы можете назвать это «кошками», а затем «git push cats master», если хотите.

ИЛИ вы можете сделать это наоборот. Таким образом, вы можете сначала сделать временное репо, а затем сделать что-то вроде:

cd ~/sb
git clone /home/temp-repo proj2
cd proj2
# make some changes...
git push origin master

Это тоже работает. Это копирует временное хранилище в новое хранилище в новом каталоге proj2. Затем в proj2 это новое репо знает об удаленном репо, называемом «origin» (/ home / temp-repo), поэтому может принудительно возвращать коммиты к нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...