Могу ли я использовать git для управления веб-сайтом, даже если другие люди обновляют его без использования git?

Допустим, у меня есть веб-сервер, к которому я могу получить доступ по ftp. Большинство людей обновляют его с помощью Dreamweaver, а я обновляю, в основном копируя и вставляя вручную между моим компьютером и сервером. У меня вопрос: могу ли я использовать git для управления сайтом (без необходимости вручную копировать / вставлять), в то время как другие люди обновляют его другими методами?

  • Много не могу установить на сервер. Я хотел бы разместить файлы на сервере только для этого.
  • Я не хочу вручную копировать и вставлять для загрузки на сервер.
  • I do not want to inadvertently undo the changes of others not using git, nor do I want to make them use git.
    • That said, if both me and others edit the website at the same time, I would want to take advantage of git's merging capabilities.

Как мне это настроить? (Кроме того, какие сценарии я могу разместить на своем компьютере, чтобы упростить эту задачу (как с перехватчиками, так и без перехватов)? (Я бы знал, как их создавать, мне просто нужны советы о том, какие типы я должен сделать для этого рабочего процесса).))

Примечание: я использую linux, если это важно. (Также я использую git из командной строки).

Примечание: я нормально делаю некоторые вещи вручную, которые обычно не нужны (например, превращаю изменения моих товарищей по команде в коммиты). Я хочу избежать ручного копирования и вставки.


person PyRulez    schedule 09.01.2016    source источник
comment
Можете ли вы установить git и запускать команды git из командной строки на сервере? Или у вас доступ ограничен ftp?   -  person imgx64    schedule 09.01.2016
comment
@ imgx64 FTP - это, по сути, все, что у меня есть. (Я могу разместить на нем репозиторий git.)   -  person PyRulez    schedule 09.01.2016
comment
Я не могу придумать, как это сделать, не имея возможности запустить git на сервере, извините.   -  person imgx64    schedule 09.01.2016
comment
Вы можете ssh зайти на этот сервер?   -  person Guildencrantz    schedule 09.01.2016
comment
@Guildencrantz Я так не думаю.   -  person PyRulez    schedule 09.01.2016
comment
О, и вы не упомянули: какая у вас локальная операционная система?   -  person Guildencrantz    schedule 09.01.2016
comment
@ imgx64 Я почти уверен, что это возможно (см. this). Мне просто нужны советы по некоторым деталям рабочего процесса.   -  person PyRulez    schedule 09.01.2016


Ответы (4)


Что вы можете сделать, не устанавливая git на сервере, - это поддерживать на вашем локальном компьютере rsync'ed локальную копию веб-сайта сервера.
Если ваш сервер поддерживает sftp, вы можете использовать csync (без установки на стороне сервера): он лучше, чем rsync, и двунаправленный.

Затем у вас может быть собственное репозиторий git, и всякий раз, когда вы хотите добавить или сравнить изменения с веб-сайта, вы можете переключить ветку и сделать:

git --work-tree=/path/to/csync/folder status .

Это сравнит ваш текущий индекс репо и эту синхронизированную локальную папку, которая отражает веб-сайт.

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

Вы можете объединить два локально, и когда вы будете готовы, вы проверяете репо, используя папку csync'ed в качестве рабочего дерева.

git --work-tree=/path/to/csync/folder checkout HEAD -- .
person VonC    schedule 09.01.2016
comment
Могу я вместо использования rsync / csync сделать git --work-tree=ftp://server/location/folder status .? - person PyRulez; 09.01.2016
comment
Нет, git изначально не поддерживает ftp. Если вам интересно, есть git-ftp проект: git-ftp.github.io/git- ftp - person Guildencrantz; 09.01.2016
comment
@PyRulez нет, отсюда и мое предложение csync: установка на стороне сервера не требуется. - person VonC; 09.01.2016
comment
@VonC Что, если бы я использовал какую-нибудь штуку для монтажа ftp? (Чтобы он выглядел как локальная папка?) - person PyRulez; 09.01.2016
comment
@PyRulez, если он у вас есть, мой ответ тоже будет применим (без необходимости csync). - person VonC; 09.01.2016
comment
@PyRulez, но VonC прав: если папка веб-сайта смонтирована, можно будет использовать git напрямую. Однако вы должны убедиться, что .git не может быть изменен другими пользователями. - person Maurice Perry; 09.01.2016
comment
@MauricePerry Я просто спросил, можно ли использовать это вместо csync. - person PyRulez; 09.01.2016
comment
@MauricePerry Мой ответ основан на том факте, что OP не может много установить на сервере, что означает отсутствие git. Это означает, что папка ftp не содержит папки .git. - person VonC; 09.01.2016
comment
@PyRulez помните: ваш вопрос указывает, что вы не можете установить много на сервере: я предполагаю, что на сервере нет git. Следовательно, я предлагаю использовать локальное репозиторий git и рабочее дерево, которое вы можете указать на свою синхронизированную папку. - person VonC; 09.01.2016
comment
@VonC Я не утверждаю, что ваш ответ неправильный, я просто спрашиваю о различных способах его использования (например, о установке ftp). - person PyRulez; 09.01.2016
comment
@VonC (Тем не менее, я лично предпочитаю это изменению рабочего дерева. Тем не менее, ваш ответ верен.) - person PyRulez; 09.01.2016
comment
@PyRulez, этот ответ предполагает git на сервере: это не относится к вашему случаю. - person VonC; 09.01.2016
comment
@VonC Это не так. На шаге 1 я предлагаю несколько способов сделать так, как будто у вас есть git на сервере, хотя на самом деле это не так. - person PyRulez; 09.01.2016
comment
@PyRulezGreat! Сообщите нам, если это сработает для вас. - person VonC; 09.01.2016
comment
@VonC Хорошо (я действительно указал csync в качестве одного из вариантов на шаге 1. Основное различие между моим и вашим ответом заключается в том, как обрабатываются пользователи, не являющиеся пользователями.) - person PyRulez; 09.01.2016
comment
@PyRulez все, что ему нужно, это ftp-сервер, который у него уже есть - person Maurice Perry; 09.01.2016

  1. Каким-то образом настройте метод, с помощью которого вы можете запускать команды git (на вашем компьютере), которые влияют на FTP-сервер, а также возможность отправлять на FTP-сервер (например, используя _1 _ / _ 2_, установка ftp-сервера локально или это в сочетании с некоторым начальным копированием и вставкой).
  2. На сервере git repo установите receive.denyCurrentBranch в updateInstead с помощью команды git config receive.denyCurrentBranch "updateInstead". См. Нажмите для развертывания .
  3. Now, when you push from your local repo the server, if the server has been modified, you will get an error like this
    ! [remote rejected] master -> master (Working directory has unstaged changes) error: failed to push some refs to '../remote'
    
    to resolve this, you must commit changes made by your teammates on the remote server. You may want to cherry-pick this. Then go to step 4.
  4. Если локальный сервер синхронизирован со своей веткой git, вы просто нажимаете на него, его рабочее дерево также будет обновлено. (Имейте в виду, что вам все равно придется делать git pull перед git push и тому подобное.)
person PyRulez    schedule 09.01.2016

Для этого я использую два сервера на одном веб-сайте. Производство с доступом только по FTP и разработка с полным доступом. Я нажимаю на сервер разработки, где у меня есть сценарий пост-получения, который проверяет голое репо во временную папку, а затем вызывает сценарий Python, который загружает код на FTP. Я не знаю, как разрешить другим людям использовать FTP. Вы действительно должны сказать им, чтобы они использовали git, это будет проще для всех, и вы также будете намного лучше контролировать код. Если у вас есть такая настройка, у вас может быть только одна ветка для отправки на производственный сервер, а другие будут только для разработки.

person david8    schedule 09.01.2016

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

  1. Сделайте его неизмененным, содержащим только рабочие файлы, и разместите репозиторий (то есть содержимое .git) локально в каталоге, указанном переменной среды GIT_DIR. core.worktree следует настроить на монтирование ftp.
  2. Вы можете иметь его как настоящий репозиторий с подкаталогом .git, делать git init и т. Д.
  3. Добавьте в него .git файл вместо использования переменной среды GIT_DIR.
  4. Сделайте это управляемым с помощью git worktree после некоторой ручной настройки, так как в настоящее время автоматическое преобразование существующий каталог к ​​рабочему дереву.

Многое зависит от того, являетесь ли вы единственным пользователем git или есть другие, которых беспокоят ваши личные изменения в каталоге ftp.

person Marko Kohtala    schedule 11.01.2016