Git не форсирует файлы. В этом случае репозитории не хранят файлы, а не напрямую, в любом случае (но см. Следующие несколько абзацев). Хранилище хранилищ совершает, а git толкает.
Весь смысл клонирования --bare
заключается в том, чтобы избежать наличия каких-либо файлов, чтобы не было файлов, мешающих коммитам. Если у вас есть файлы, они могут предотвратить обновление транзакций.
Возможно, вы задаетесь вопросом: какая хорошая система, у которой нет файлов? В самом деле, это было бы неплохо, поэтому хранилища сохраняют фиксации, и каждая фиксация представляет собой моментальный снимок всей каталогов, полный файлов. Затем вы можете направить Git на извлечение любого фиксации из набора всех коммитов, сохраненных в репозитории.
Теперь, если и когда вы сделать прямой Git, чтобы извлечь некоторые совершить, чтобы сделать каталог полный каждого файла, который был сохранен в этой конкретной фиксации, вы должны дать Git место положить эти файлы. Обычный, не --bare
репозиторий имеет одно отличительное место, называемое рабочим деревом (или иногда рабочее дерево или тому подобное). Это дерево работы позволяет просматривать все файлы, изменять их, добавлять новые файлы, удалять файлы, а затем делать новый фиксация результата.
Иными словами, рабочее дерево - это то место, где вы выполняете свою работу.
Если вы делаете свою работу в рабочем дереве и кто-то другой выталкивает фиксацию в ваше хранилище, и что новый коммит используются для замены работы дерева с их совершенного деревом, что происходит со всеми ваш работы? Все будет потеряно! Таким образом, Git обычно отказывается от нажатия на ваш репозиторий, когда ваш репозиторий имеет дерево работы.
Следовательно, Git предоставляет открытый репозиторий. Голый репозиторий - это один без дерева. Без рабочего дерева никто не может работать в нем, поэтому push не потеряет работу. Таким образом, он служит местом, куда вы всегда можете безопасно двигаться. Это все, но это очень важно.
Если вы хотите увидеть коммиты (и их файлы), которые были сдвинуты на голое хранилище, вы можете сделать, не голый клон, и выборкой из толкающих в хранилище, в не-голый клон , а затем выезд сделка в вопросе. Это заменит вашу работу их работой , но с вы, сказали, что «сделайте это сейчас», вы должны иметь в виду это, вместо того, чтобы ваша работа была грубо переписана их работой только потому, что они сейчас толкались.
Как видно из сносок, существует множество предостережений и корректировок, но это базовая настройка. Голый клон - это просто для подталкивания, а не-голые клоны - это то, где вы делаете свою работу.
На самом деле, это только при нажатии на текущей ветви, и даже тогда это управляемо.
Обычный git checkout
также пытается удостовериться, что вы не потеряли свою собственную работу, которую вы не сохранили. Вы можете сказать «заставить» перезаписать свою собственную работу или использовать git reset --hard
, чтобы сначала отказаться от своей собственной работы, и здесь есть много сложных случаев, но Git обычно обрабатывает все совершенные данные как постоянные и неизгладимые. Данные рабочих деревьев гораздо меньше.
Возможный дубликат [git push новый файл для голого репо не удалось: «ошибка: src refspec master не соответствует никаким». Почему?] (Http://stackoverflow.com/questions/41326402/git-push-new-file-to-a-bare-repo-failed-error-src-refspec-master-does-not-mat) – vlcekmi3
Вы вероятно, не толкает, где вы думаете ... кстати, в чем причина открытого хранилища? –