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