GIT: после нажатия удаленное репо показывает файлы как удаленные

Не удается найти файлы в удаленном репо.

  • Создал репозиторий GIT на общем хостинге (site5), как описано их учебник
  • init'd и добавил простой текстовый файл. OK
  • Клонируется на моей локальной (WinXP) машине. OK
  • Удаленный тестовый файл на моей локальной копии, добавил несколько реальных файлов. OK
  • Выполнены локальные изменения. OK
  • Отбрасывается на удаленный сервер. OK
  • MsysGit бросил несколько предупреждений (ниже), но сказал мне, что у нас был успех.
  • FTP'd на удаленный сервер, но файлов там не было.
  • SSH'd (с использованием PUTTY) и статус GIT. Я дал мне весь список, но со словом "удалено", предшествующим каждому файлу. См. Ниже.

Отметив, что я не на какой-либо ветке, я проверил конкретную фиксацию. Он нашел это, но файлы и статус GIT по-прежнему ничего не показывают. Он сказал мне:

Примечание: переход на "9c47b5", который не является локальной ветвью

Пытался проверить мастер HEAD. Не повезло, это говорит мне

-jailshell:/usr/bin/git: нет такого файла или каталога


Git статус показывает:

[[email protected] tanee.com]$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       deleted:    _notes/dwsync.xml
#       deleted:    contact-us/_notes/dwsync.xml
#       deleted:    contact-us/index.html
#

Предупреждения:

warning: updating the current branch
warning: Updating the currently checked out branch may cause confusion,
warning: as the index and work tree do not reflect changes that are in HEAD.
warning: As a result, you may see the changes you just pushed into it
warning: reverted when you run 'git diff' over there, and you may want
warning: to run 'git reset --hard' before starting to work to recover.
warning: 
warning: You can set 'receive.denyCurrentBranch' configuration variable to
warning: 'refuse' in the remote repository to forbid pushing into its
warning: current branch.
warning: To allow pushing into the current branch, you can set it to 'ignore';
warning: but this is not recommended unless you arranged to update its work
warning: tree to match what you pushed in some other way.
warning: 
warning: To squelch this message, you can set it to 'warn'.
warning: 
warning: Note that the default will change in a future version of git
warning: to refuse updating the current branch unless you have the
warning: configuration variable set to either 'ignore' or 'warn'.
Pushing to [email protected]
To [email protected]/26d352f..9c47b55  master -> master

Ответ 1

Когда вы нажимаете на дистанционное репо в Git, оно не обновляет рабочую копию этого удаленного репо. Это означает, что рабочая копия будет несовместима с последней версией, которую вы нажали. Чтобы избежать этой путаницы, рекомендуется только нажать на голые репозитории; которые не имеют рабочей копии. Причина в том, что если что-либо в рабочей копии изменилось, у вас не будет возможности быть предупрежденным об этом и выполнить слияние, потому что вы нажимаете на удаленное репо.

Как правило, единственный способ, которым вы должны изменить рабочую копию, - это внутри него, например, делать вытягивание или проверку внутри этой рабочей копии. Если вы хотите, чтобы копия вашего кода была проверена где-то на вашем сервере автоматически при нажатии, вы должны установить post-receive hook который затем переместит a git pull в репозиторий с рабочей копией.

Ответ 2

У меня есть аналогичный пример использования: желаю "первозданного" домашнего каталога на нескольких серверах, где я проверяю процессы, журналы мониторинга и т.д. - без необходимости изменять каждый из них при добавлении новой команды, псевдоним, script и т.д. Изучая существующие ответы, я решил вот так:

  • Создайте "master" репо на моем настольном компьютере, представляющем мой желаемый каталог $HOME на удаленном
  • Получить мастер-репо в хорошем состоянии с настройкой, которую я хотел (в частности, с каноническим файлом .ssh/authorized_keys)
  • На одном удаленном компьютере создайте новое (не-голое) репо в $HOME
  • Нажмите мастер на дистанционное репо в $HOME
  • Запустить 'git reset --hard' в удаленном репо

Чтобы обновить их, я добавил следующий псевдоним git, чтобы помочь мне обновить все мои удаленные рабочие копии в одной команде:

[alias]
    pushall = "!for remote in myremote{1..10}; do git push ${remote} master; ssh ${remote} git reset --hard; done"

Теперь, когда предоставляется новый удаленный доступ - я rsync мой каталог $HOME из существующего пульта в новый, а затем добавьте мою новую машину в указанный выше псевдоним. Запуск 'git pushall' после внесения изменений (скажем, после добавления удобного нового script для просмотра журналов) затем обновит все удаленные рабочие копии с помощью первоначальной копии того, что я хочу, чтобы мой (удаленный) каталог $HOME быть. Больше не обновлять каждый пульт вручную!

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

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

Ответ 3

Вам не нужно было создавать "стандартный" git репо на удаленном хосте, как отметил Брайан Кэмпбелл. Что вам следует делать:

  • скопируйте все файлы, которые вы хотите разместить под управлением версии, в каталог на вашем локальном компьютере.

  • удалите их и их содержащую директорию на удаленном хосте.

  • все еще на удаленном хосте создайте новый каталог с именем projectname.git(замените значащее имя для projectname), cd в него и запустите git init --bare

  • на вашем локальном компьютере в каталоге, в котором вы разместили свои файлы:

    • запустите git init, чтобы инициализировать репозиторий git
    • запустите git add ., чтобы добавить все файлы и подкаталоги
    • run git commit -m "Initial commit"
    • Вы должны увидеть что-то вроде [master agd27c9] Initial commit
    • run git remote add origin ssh://hostaddress/path/to/dir/projectname.git (возможно, вам придется немного изменить это, если вы обычно обращаетесь к удаленному хосту с помощью ssh://user @hostaddress, например)
    • run git push origin master
  • Вы должны увидеть сообщение, указывающее соединение с вашим удаленным хостом, и некоторый вывод из git, указывающий, что нажатие было успешным. Обычно это выглядит так: Counting objects ...
    Delta compression ...
    Writing objects ...
    Total ...
    To ssh:// ...
  • Если все произошло так, как описано выше, все готово. Вы можете добавить по умолчанию push и merge, если хотите:
    • git config branch.master.remote origin && git config branch.master.merge refs/heads/master