2009-12-02 5 views
18

Я получаю предупреждениеКак проверить, нет ли репозитория?

warning: You did not specify any refspecs to push, and the current remote 
warning: has not configured any push refspecs. The default action in this 
warning: case is to push all matching refspecs, that is, all branches 
warning: that exist both locally and remotely will be updated. This may 
warning: not necessarily be what you want to happen. 
warning: 
warning: You can specify what action you want to take in this case, and 
warning: avoid seeing this message again, by configuring 'push.default' to: 
warning: 'nothing' : Do not push anything 
warning: 'matching' : Push all matching branches (default) 
warning: 'tracking' : Push the current branch to whatever it is tracking 
warning: 'current' : Push the current branch 

, который (я думаю) предупреждение, что пульт ДУ не голый. Тем не менее, я предполагал, что удаленный должен быть голым, а каталог (который находится в форме foo.git) не содержит в нем .git-каталога. Как проверить, что он голый?

Дополнительная информация: Удаленный репозиторий находится на компьютере с git 1.5.4.3, а локальный репозиторий имеет git 1.6.3.3. Обе машины - Ubuntu - местный - Karmic Koala, а удаленная - более старая версия.

+0

Просто добавили критерии, который указывает хранилище голое один – VonC

+3

'$ мерзавец преподобным синтаксического анализа --is-голое repository' - кредит ** jberryman ** [пожалуйста upvote свой ответ ] (http://stackoverflow.com/a/14734826/495132) –

ответ

23

Как проверить, что он голый?

Как уже упоминалось в answer below (upvoted) по jberryman, если у вас есть доступ к удаленному репо, вы можете запустить в нем:

git rev-parse --is-bare-repository 

Он был введен еще в commit 493c774, Git 1.5.3 (сентябрь 2007) и commit 7ae3df8 by Matthias Lederhofer (matled).

Когда репозиторий является открытым шрифтом «true», иначе «false».


Вы можете использовать (от git config):

git config --add push.default current 

, чтобы указать, что вы хотите, чтобы нажать по умолчанию.

или:

git config --global push.default matching 

, если у вас есть много хранилищ.

current: нажмите текущую ветвь на одноименную ветку.

Проверьте также, не возникло ли предупреждение после сообщения об ошибке, как в этом документе SO question.


Таким образом, ваш репо назначения может быть голой один, но, как сказано в Sensible Git Refspecs:

Когда вы делаете git pull, fetch,push и некоторые другие вам нужно указать refspec для тока репозиторий.
A refspec описывает сопоставление между локальным эталоном и удаленным, поэтому вы можете нажать (или вытащить и т. Д.) Главную ветвь ветви и сохранить ее как головку ветви начала координат. В принципе, это способ отображения филиалов между репозиториями.

См. Также "concept of bared shared repository in git".


Примечание: это правда, чем от Git1.6.3,:

«git push» в отрасли, которая в настоящее время извлеченным будет отказано по умолчанию.
Вы можете выбрать, что должно произойти при таком нажатии, задав конфигурационную переменную receive.denyCurrentBranch в принимающем репозитории.

Но я не думаю, что это то, что вы видите прямо сейчас.


Как уже упоминалось в "all about "bare" repos -- what, why, and how to fix a non-bare push" (на дне)

Чтобы сделать это "реальный" голый репо, просто удалите все файлы, кроме .git, затем mv .git/* .; rmdir .git.
Наконец, отредактируйте файл config и измените код bare = false на номер bare = true.

Так что, если ваш репо назначения имеет config файл с bare = true, это голый репо.

+0

+1. Волшебными словами являются 'git config core.bare' –

3

Сообщение, которое вы получаете, означает, что ваш удаленный репозиторий пуст (что не имеет ничего общего с тем, что он голый). При нажатии на удаленное хранилище в первый раз, вам нужно указать, что нажать:

git push origin master 

Это будет толкать ваш текущий главный филиал в удаленное хранилище. Последующие вызовы git push будут толкать «соответствующие» ветви, т. Е. Если в удаленном репозитории есть «ведущая» ветвь, ваша локальная «ведущая» ветвь будет нажата на нее.

+0

Вы также можете сказать« git push -all », чтобы выталкивать все в локальной копии на удаленный. (После преобразования из Subversion в 300+ репозиториев git, я очень с этим знаком знаком!) – ebneter

+0

Вы имеете в виду, что удаленный репозиторий является открытым или удаленной ветвью моего локального репозитория? –

+0

Ни то, ни другое. Сообщение, которое вы получаете, не имеет никакого отношения к какому-либо из ваших репозиториев: * bare *. Речь идет о том, что ваш удаленный репозиторий * пуст *, т. Е. В нем нет коммитов, нет ветвей, нет ничего. – Bombe

34

Это не звучит, как это была ваша проблема, но на самом деле ответить на этот вопрос, который вы просили в названии: Вы можете запустить ...

$ git rev-parse --is-bare-repository 

... для запроса, если репо голое или нет. Возвращает «true» или «false».

+0

Спасибо. Это то, что мне нужно. –

0

Открыть файл config в каталоге .get и найти bare = true.

0

попробовать

$ git config --get core.bare 
Смежные вопросы