Удалить файл из Git - путаница

Я пытаюсь научиться использовать Git, и я как бы получаю основы перетаскивания и т. Д., Но я запутался в удалении.

Вот что я сделал (с фортраббитом и ларавеллой):

  • Создан проект Laravel
  • бежать git init . в папке проекта
  • бежать git remote add origin ...
  • бежать git add -A
  • бежать git commit -am 'Initial'
  • бежать git push -u origin master

Теперь моя локальная копия совпадает с моей удаленной копией.

Теперь я хочу удалить файл, поэтому я создаю тестовый файл:

  • бежать touch testfile1.php

Я добавляю файл, фиксирую его, затем нажимаю на него. Теперь у меня есть тестовый файл локально и удаленно.

Проблема заключается в его удалении. Этот вопрос состоит из 2 частей:

Чтение этого ТАКОГО вопроса: Как я могу удалить файл из git repo? он говорит, что я должен сделать:

  • git rm testfile1.php
  • git commit -m 'deleted file'
  • git push origin master

Однако это только удаляет локальную копию. Удаленная копия все еще там!

Если я удаляю его из локальной копии, как он удаляется и из удаленной версии?

Мой второй вопрос: если у кого-то есть копия, как они узнают, что я удалил файл? Если они перенесут свою копию обратно в удаленную, не будет ли она просто повторно добавить удаленный файл?

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ

Это выход git rm команда и удаленная версия после команды:

Первое изображение я набираю git rm testfile1.php файл. Затем выводит rm testfile1.php и возвращается к приглашению. Когда я возвращаю SSH в удаленную версию, testfile`.php все еще там: /

Другое Править

Я только что прочитал некоторые справочные статьи, предоставленные Fortrabbit, в первую очередь, эту: http://help.fortrabbit.com/g it

Он говорит, что перезаписывает, но не удаляет.

Будет ли это причиной того, что g it говорит, что он обновлен, но файл все еще находится в корневом веб-каталоге? Если да, то по какой причине может быть не удалить файл, который я просил удалить?!

6 ответов

Решение

Этот вопрос на самом деле является специфическим для Fortrabbit: http://help.fortrabbit.com/git

Перезаписать, но не удалять

Старые файлы будут перезаписаны теми, которые были обновлены через Git. Однако развертывание Git ничего не удалит. Поэтому, когда вы удаляете файл из вашего репозитория Git, он все еще будет там, в веб-пространстве.

Это безопасное значение по умолчанию для работы с "содержимым времени выполнения". Когда вы реализуете что-то вроде формы загрузки изображений, вы загружаете дополнительный контент в свое веб-пространство. Эти файлы создаются в веб-пространстве напрямую. Таким образом, они не являются частью Git-репо. Но, скорее всего, вы не хотите, чтобы они удалялись при каждом изменении кода.

Вы можете настроить это поведение с помощью файла fortrabbit.yml:

http://help.fortrabbit.com/deployment-file

Содержимое файла должно быть:

version: 1 
strategy: fullsync
excludes:
     - app/storage/ 
     - uploads/
     - vendor/

Полная синхронизация означает, что содержимое вашего веб-сервера будет точно таким же, как и в вашем локальном хранилище. Ключ exclude указывает, какие папки вы не хотите автоматически синхронизировать (вы должны поместить туда все папки, которые могут содержать пользовательские данные, такие как аватары или вещи, которые не находятся в git, но требуются для вашего приложения, например, папки vendor)

Ах, хорошо, теперь я вижу проблему. Вы ожидали git push изменить файлы в рабочем каталоге репозитория git на сервере. Это не так, как это работает. Перемещение в удаленное хранилище обновляет только базу данных объектов git, а не рабочий каталог. Если вы побежали git log на сервере вы увидите, что фактически введенный вами коммит есть, но рабочий каталог не был обновлен. git reset --hard на сервере должно это исправить.

Обычно git-репозитории на сервере создаются как нечто, называемое "чистым репозиторием". Голые репозитории не имеют рабочего каталога, они просто содержат базовую базу данных объектов git. В вашем случае вы создали полное (не пустое) хранилище на сервере и использовали его в качестве удаленного. Это не рекомендуется, так как это создает проблемы, подобные тем, что вы обнаружили здесь.

Что вам нужно сделать, это создать пустой репозиторий на сервере, а затем сделать локальную проверку на клон сервера и извлечь из него изменения.

Вы не выполнили все команды, предложенные вашим руководством:

git rm testfile1.php
git commit -m 'deleted file'
git push origin master

Вы сделали только первый, вам нужно зафиксировать и нажать на пульте, чтобы удалить файл там.

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

Вот пошаговый процесс:

  1. локальный и удаленный одинаковы

git rm testfile1.php

  1. локально testfile1.php удален, но это изменение не зафиксировано. testfile1.php все еще присутствует на удаленном компьютере.

git commit -m 'deleted file'

  1. локально testfile1.php удален, это изменение зафиксировано. Ваше местное отделение на 1 коммит опережает удаленное. (testfile1.php все еще присутствует на удаленном компьютере)

git push origin master

  1. Локальный удаленный - это то же самое (если вы используете пустой репозиторий на удаленном компьютере. В противном случае смотрите ответ @Ajedi32.)

Использование "git commit -a"

Если вы намереваетесь, что ваш следующий коммит должен записать все модификации отслеживаемых файлов в рабочем дереве и записать все удаления файлов, которые были удалены из рабочего дерева с помощью rm (в отличие от git rm), используйте git commit -a, так как автоматически заметит и запишет все удаления. Вы также можете получить аналогичный эффект без фиксации, используя git add -u.

Удалить файл локально

 rm testfile1.php

Тогда беги,

 git rm testfile1.php
 git commit -m 'deleted file'
 git push origin master

(Вот как я это делаю в своей повседневной жизни.)

Если вы удалите файл и успешно отправите изменения, другой человек не сможет отправить свои изменения, пока они pull перемены. В ходе этого процесса файл будет удален из их клона репозитория. Иногда они могут получить конфликт, если они имеют изменения, зафиксированные локально в одном и том же файле, что указывает на то, что файл удален на удаленном и изменен на локальном. Они могут разрешить конфликт и затем нажать обновление

Первый:

rm testfile1.php

Затем:

git add .
git commit -m 'message'
git push

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

Другие вопросы по тегам