2013-05-23 1 views
0

Я установил хранилище (git init) на существующую неверсифицированную кислоту в производстве (не говорите мне). После первоначального фиксации импорта я клонировал репо на моей машине dev и начал редактирование.Push от локальной копии до удаленной отображается с изменениями

После первого фиксации/нажатия все казалось нормальным на моей локальной копии, но затем на prod-сервере git pull всегда говорило «Уже обновлено». и изменения были показаны как локальная модификация «с отрицанием».

Чтобы уточнить, что я имею в виду с отрицанием: предположим, что помимо редактирования я добавил файл (myfile) в свою локальную копию и добавил/нажал его. Что я буду видеть на сервере будет:

# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
#  deleted: myfile 

вместе с серией:

#  modified: other_file 

, которые отражают файлы, которые я только что совершил, но с моими изменениями «вернулись». История в git log кажется линейной и последовательной.

Это содержание .git/конфигурации на сервере:

[core] 
    repositoryformatversion = 0 
    filemode = true 
    bare = false 
    logallrefupdates = true 
[remote "origin"] 
    fetch = +refs/heads/*:refs/remotes/origin/* 
    url = [email protected]:repo 
[branch "master"] 
    remote = origin 
    merge = refs/heads/master 

На моей локальной копии это же плюс:

ignorecase = true 
precomposeunicode = false 

в секции [основной].

  • DEV машина мерзавец версия 1.8.1.1
  • прод машина мерзавец версия 1.5.6.5 (Я знаю, что это старый, но я не могу обновить его прямо сейчас)

Может быть что-то относительное к отслеживанию? Я сейчас довольно озадачен и делаю это хуже, кажется, что я единственный на весь интернет, испытывающий нечто подобное.

+0

Чтобы получить изменения на сервере на практике, мне нужно сбросить на голова каждый измененный файла и проверку его от последней фиксации (история коммитов является правильной и последовательной). Еще одна вещь, которую я заметил (но я не могу сказать, нормально это или нет), это то, что когда я выхожу с производственного сервера, git спрашивает у меня пароль пользователя ssh, как будто он будет удаленно получать изменения. разве они уже не на сервере? – karl

ответ

1

Вы нажимаете на не-голый репо. Вы не должны этого делать. Прочитайте, что такое удаленные ветви отслеживания, и какие git push и git fetch сделать. Вы меняете, какая фиксация указывает на то, что ветка выписки на сервере указывает на отсутствие обновления рабочей копии (то есть эффект нажатия на не-голый репо).

Так что теперь git status на сервере замечает, что рабочий каталог отличается от HEAD. Он предполагает единственную логическую вещь: вы должны были внести изменения в рабочий каталог. Вот что сообщает git status. Есть два пути решения этой проблемы:

  • Не толкает к репо производства серверов. Моя личная рекомендация. Настройте голое репо где-то еще и нажмите туда. Добавьте его как удаленный сервер в репо. Когда вы хотите развернуть ssh на сервер и потянуть. Это также отделяет контроль версий от развертывания.

  • Настройте крючок на сервере, который выполняет проверку при нажатии.Вы можете найти более подробную информацию по этому подходу in the GitFAQ

+0

Благодарим вас за четкое объяснение происходящего, которое, несомненно, будет работать – karl