2015-05-15 3 views
2

У меня есть (основной) папка «Prj» с каталогами и имею git init там создать репозиторий и добавил и совершил все файлы с git add *мерзавец толчок ошибки между двумя локальными репозитариями

Я создал другой каталог «prj2», где у меня есть git init, а затем сделал git pull, который скопировали все к «prj2»

теперь, когда я вносить изменения в файлы в prj2 репо и фиксации, а затем сделать git push к Prj (основной) дает ошибку:

remote: error: refusing to update checked out branch: refs/heads/master[K remote: error: By default, updating the current branch in a non-bare repository[K remote: error: is denied, because it will make the index and work tree inconsistent[K remote: error: with what you pushed, and will require 'git r.............

Это правильный способ настройки основного проекта (prj) и второго (prj2), из которого я могу нажать на главный?

, и если нажатие невозможно, потому что основной проект-репо является не голым git init..etc, то как следует нажать на основное репо?

или другой вариант лучше?

ответ

3

Более простой способ - клонировать основной проект и настроить его как remote. Тот факт, что он является местным, не является проблемой

Иными словами, вместо init двух репозиций, init --bare, а затем клонировать его.

Или, если они оба должны иметь рабочую копию (то есть не голые), то вы можете заставить ее работать, только если оба репозитория не находятся в одной ветви одновременно. Если бы это было так, это означает, что рабочая копия prj1 станет недействительной, когда prj2 подтолкнет ее изменения (именно поэтому вы получаете эту ошибку).

Наконец, если вам нужно быть в той же ветке, git - это неправильный инструмент для использования, поскольку вы говорите больше о зеркале . В этом случае что-то вроде rsync будет работать намного лучше

+0

Я теперь клонировал prj (main) в новую пустую директорию prj2, сделал некоторые изменения, совершил и попробовал «git push origin master» он дал ту же ошибку – succeed

+0

извините. я не заметил, что ваше первое репо не было голым. это требование? вам нужно иметь две рабочие копии? если да, то что вы ожидаете от рабочей копии prj1 при нажатии той же ветви из prj2 ?? потому что это проблема, которую вы получаете. Одним из решений является удостовериться, что обе рабочие копии не находятся в одной ветви одновременно. – Hilikus

+0

Да, не нужно было иметь две рабочие копии, поэтому я изменил первый prj-репо на голый, а затем нажал, но изменения были очевидно, когда открываются толкаемые файлы в репо, к которым они были нажаты? Однако он показывает фиксацию в «git log» – succeed

-1

ошибка: отказ обновить проверено отрасль: refs/heads/master Была одна из первых ошибок, которые когда-либо случались со мной.

Я читал, что это может произойти из-за того, что ветка находится в не-голом состоянии. Если кто-то подталкивает к этой ветке, он перезапишет существующий статус извлеченной копии.

Если я правильно помню, общий подход заключается в использовании голое хранилище, которое сделано по:

git init --bare 

еще одна возможность заключается в использовании ветвей

Это может быть полезно посмотреть на Git Push error: refusing to update checked out branch, который помог мне тогда.

+0

У меня создалось впечатление, что «git init --bare» не будет работать в непустом каталоге, но, похоже, он работает! однако изменения arent отражаются в основном голом репо. Когда я открываю то, что должно было быть измененным файлом, у него нет обновленного контента, который был нажат на него? Запуск «git log» показывает фиксацию – succeed

0

Если вы намереваетесь работать в обоих репозиториях, то я нашел, что выполнение prj2 из prj1 является самым чистым решением, а не попыткой нажимать prj2 на prj1. Если prj1 был клонирован из третьего (возможно, удаленного) репозитория, вы можете по-прежнему нажимать, как обычно, на третье (удаленное) репо из prj1, если вы используете эту настройку.

Если вы не намерены работать в prj1, и это всего лишь центральная точка агрегации, тогда настройка голого репозитория, как указывали другие, вероятно, лучше всего.

Смежные вопросы