Ошибка при нажатии с помощью Git [duplicate]

Более гибкое решение для создания элементов и связывания событий ( source )

// creating a dynamic element (container div)
var $div = $("
", {id: 'myid1', class: 'myclass'}); //creating a dynamic button var $btn = $("

Примечание. Это создаст экземпляр обработчика события для каждого элемента (может повлиять на производительность при использовании в петлях)

141
задан Cœur 26 March 2017 в 04:27
поделиться

9 ответов

Существует два типа репозиториев: голый и не-голый

. В базовых хранилищах нет рабочей копии, и вы можете нажать на них. Таковы типы репозиториев, которые вы получаете в Github! Если вы хотите создать голый репозиторий, вы можете использовать

git init --bare

Итак, одним словом, вы не можете нажать на не-голый репозиторий (Edit: Ну, вы не можете нажать на в настоящее время проверяется ветвь репозитория. С открытым репозиторием вы можете нажать на любую ветку, поскольку ни один из них не был извлечен. Хотя возможно, переключение на не-голые репозитории не является обычным явлением). Что вы можете сделать, это извлечь и слить из другого репозитория. Вот как работает pull request, что вы можете видеть в работе Гитуба.


Обновление: Спасибо VonC за то, что указали это, в последних версиях git (в настоящее время 2.3.0), и вы можете попросить их уйти от вас, и вы не нажимаете на них. , возможно нажатие на извлеченную ветку не-голых репозиториев . Тем не менее, вы все равно не можете нажать на грязное рабочее дерево, которое в любом случае не является безопасной.

165
ответ дан Community 19 August 2018 в 02:37
поделиться
  • 1
    Да! Это верно, спасибо! Поскольку у меня около миллиона дел, я случайно клонировал рабочий каталог .... doh! – Funky 20 June 2012 в 12:10
  • 2
    Фактически, вы можете просто нажать на не-голый репозиторий, вы просто не можете нажать на одну ветвь, которая в настоящий момент проверена . – Nowhere man 14 February 2013 в 17:18
  • 3
    На самом деле есть десятки других сценариев. Например, некоторые из моих репозиториев находятся только на моей рабочей станции и моем ноутбуке (а не на коде, но заметки я беру). На каждом из них есть две ветви, «рабочая станция» и "ноутбук". На рабочей станции я просматриваю только «рабочую станцию», и я только нажимаю на «рабочую станцию», ветви на ноутбуке (и наоборот). – Nowhere man 15 February 2013 в 18:50
  • 4
    Теперь у вас есть безопасный способ нажать на не-обнаженное репо с Git 2.3.0 (февраль 2015) и git config receive.denyCurrentBranch=updateInstead: stackoverflow.com/a/28262104/6309 – VonC 1 February 2015 в 13:36
  • 5
    @skelly Ваш клон не голый, а копия на github. Итак, хотя оба клона имеют всю историю, копия на github не имеет фиксации, но ваша копия делает, чтобы вы могли работать! – Shahbaz 23 January 2016 в 20:26
85
ответ дан dotancohen 19 August 2018 в 02:37
поделиться

Поскольку уже существует существующий репозиторий, запуск

git config --bool core.bare true

в удаленном репозитории должен быть достаточным

Из документации core.bare

Если true ( bare = true), предполагается, что репозиторий будет голым без привязки рабочего каталога. Если это так, количество команд, требующих рабочего каталога, будет отключено, например git-add или git-merge (но вы сможете нажать на него).

Этот параметр автоматически догадывается git-clone или git-init при создании репозитория. По умолчанию репозиторий, который заканчивается на «/.git», считается не голым (bare = false), а все остальные репозитории считаются голыми (bare = true).

11
ответ дан Johnny 19 August 2018 в 02:37
поделиться

Возможно, ваше удаленное репо находится в ветке, которую вы хотите нажать. Вы можете попробовать проверить другую ветку на удаленном компьютере. Я сделал это, но эти ошибки исчезли, и я добился успеха в своем удаленном репо. Обратите внимание, что я использую ssh для подключения моего собственного сервера вместо github.com.

3
ответ дан JZAU 19 August 2018 в 02:37
поделиться
8
ответ дан kenorb 19 August 2018 в 02:37
поделиться

Сводка

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

Поскольку в голых репозиториях никогда не было ни одной ветки, вы всегда можете нажать на любую ветвь открытого репозитория.

Вскрытие проблемы

Когда ветвь проверяется, фиксация добавит новый фиксатор с головкой текущей ветви в качестве ее родительского элемента и переместит голову ветви в новую фиксацию.

So

A ← B
    ↑
[HEAD,branch1]

становится

A ← B ← C
        ↑
    [HEAD,branch1]

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

A ← B ← X
    ↑   ↑
[HEAD] [branch1]

Теперь пользователь больше не находится в ветке1, не попросив явно проверить другую ветку. Хуже того, пользователь теперь находится вне любой ветки, и любая новая фиксация будет просто болтаться:

      [HEAD]
        ↓
        C
      ↙
A ← B ← X
        ↑
       [branch1]

Гипотетически, если на данный момент пользователь проверяет другую ветку, тогда это оборванное сообщение становится честной игрой для сборщика мусора Git.

38
ответ дан Nowhere man 19 August 2018 в 02:37
поделиться

cd в каталог repo /, который вы нажимаете на удаленный компьютер, и введите

$ git config core.bare true
17
ответ дан Ricky 19 August 2018 в 02:37
поделиться
  • 1
    Это не работает. Репозиторий остается пустым после нажатия на него. – Sören 23 July 2018 в 17:17

Для меня следующее трюк:

git config --global receive.denyCurrentBranch updateInstead

Я настроил диск F :, почти полностью, чтобы синхронизировать между моим рабочим столом Windows 10 и моим Windows 10, используя Git. Я закончил выполнение указанной выше команды на обеих машинах.

Сначала я поделился файловым диском F на компьютере. Затем я смог клонировать его на своем ноутбуке, запустив:

F: git clone 'file://///DESKTOP-PC/f'

К сожалению, все файлы оказались под «F: \ f \» на моем ноутбуке, а не под F: \ напрямую. Но я смог вырезать и вставить их вручную. После этого Git по-прежнему работал с нового места.

Затем я попытался внести некоторые изменения в файлы на ноутбуке, совершить их и вернуть их на рабочий стол. Это не сработало, пока я не запустил команду git config, упомянутую выше.

Обратите внимание, что я запускал все эти команды из Windows PowerShell на обеих машинах.

UPDATE: в некоторых случаях возникают проблемы с изменениями. Я, наконец, только начал набирать изменения, выполнив на компьютере следующее: я хочу вытащить последние фиксации:

git pull --all --prune

12
ответ дан Stephen G Tuggy 19 August 2018 в 02:37
поделиться

У меня есть эта ошибка, потому что git repo был (случайно) инициализирован дважды в том же месте: сначала как не-голый репо и вскоре после него в качестве голого репо. Поскольку папка .git остается, git предполагает, что репозиторий не голый. Удаление папки .git и данных рабочего каталога решило проблему.

1
ответ дан xastor 19 August 2018 в 02:37
поделиться
  • 1
    В моей ситуации это было так. Удаление папки .git на пульте дистанционного управления позволило мне нажать начальную фиксацию. – tim.rohrer 2 March 2018 в 02:29
Другие вопросы по тегам:

Похожие вопросы: