После Git push удаленное репо показывает файлы как удаленные - PullRequest
3 голосов
/ 21 сентября 2010

Я не могу найти ни одного файла в моем удаленном репо.

  1. Создание репозитория Git на виртуальном хостинге (site5), как описано в их руководстве
  2. init'd его и добавил простой текстовый файл. OK
  3. Клонирован на мою локальную (WinXP) машину. OK
  4. Удалил тестовый файл из моей локальной копии, добавил несколько реальных файлов. OK
  5. Совершены локальные изменения. OK
  6. Отправлено на удаленный сервер. OK
  7. MsysGit выдал несколько предупреждений (ниже), но сказал, что мы добились успеха.
  8. FTP зашел на удаленный сервер, но файлов там не было .
  9. SSH заходил (используя PUTTY) и запускал git status. Это дало мне весь список, но со словом «удалено» перед каждым файлом. Смотри ниже.

Отрабатывая подсказку о том, что меня нет ни в одной ветке, я проверил конкретный коммит. Он нашел его, но файлы и git status все еще показывают, что ничего не делает. Он сказал мне:

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

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

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


Показывает состояние Git:

[frumwebc@your 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 fru@67......ee.com
To fru@67......ee.com/26d352f..9c47b55  master -> master

Ответы [ 3 ]

6 голосов
/ 21 сентября 2010

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

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

3 голосов
/ 31 октября 2012

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

  1. Создайте на моем настольном компьютере репозиторий 'master', представляющий желаемый каталог $ HOME на удаленном компьютере
  2. Приведите главное репо в хорошее состояние с нужной мне настройкой (в частности, с каноническим файлом .ssh / authorized_keys)
  3. На одном удаленном компьютере создайте новое (не пустое) репо в $ HOME
  4. Вставить мастер в удаленное репо в $ HOME
  5. Запустить '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 после внесения изменений (скажем, после добавления удобного нового скрипта для просмотра журналов) обновит все удаленные рабочие копии первичной копией того, что я хочу, чтобы мой (удаленный) каталог $ HOME был.Больше не нужно обновлять каждый пульт вручную!

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

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

2 голосов
/ 21 сентября 2010

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

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

  2. удалить их и каталог с ними на удаленном хосте.

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

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

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