Управление локальными, dev и live версиями WordPress с помощью Git - PullRequest
2 голосов
/ 09 марта 2011

Я смотрю на использование git для управления контролем версий для проекта WordPress.

У меня обычно есть локальная версия, версия для разработки на веб-сервере, к которой клиент может получить доступ и протестировать, а затем вживуюversion.

Обычно я буду разрабатывать локально, затем помещать свои изменения в репозиторий на сервере и затем SSH в папку dev на сервере и извлекать из репозитория.Когда я хочу опубликовать изменения на действующем сайте, я отправляю SSH в текущую папку на веб-сервере и извлекаю из репозитория.

Вот моя дилемма.

Я хочу добавить носитель влокальная версия через администратора WordPress (загрузка изображений и т. д.) будет игнорироваться, но я хочу, чтобы медиа, добавленные в версию Dev, отслеживались, поэтому, когда я перетаскиваю на живой сайт, медиа-файлы с сайта разработчика извлекаются.

Есть мысли о том, как сделать что-то подобное этой работой?

1 Ответ

5 голосов
/ 09 марта 2011

Возможно, есть лучшие решения для этого, но эти два варианта отлично сработали для меня в подобных ситуациях. Давайте предположим, что ветка, над которой вы работаете локально, называется master, и во всех ваших репозиториях удаленный origin ссылается на пустой репозиторий, к которому вы добавляете.

  1. Если все ваши носители аккуратно попадают в один каталог, у вас может быть отдельный репозиторий, который отслеживает носитель и добавляет его как подмодуль в репозитории dev и live. В вашей локальной копии вы должны либо:

    • [в ситуации, когда вы хотите, чтобы живые медиа были локально], будьте осторожны, чтобы не (а) зафиксировать в вашем подмодуле, (б) нажать на него и (в) добавить новую версию подмодуля в вашу ветку master
    • [в ситуации, когда вам вообще не нужны эти носители в вашей локальной копии], не обновлять и не инициализировать субмодуль - просто добавьте его путь к .git/info/exclude

    Даже если ваши медиафайлы находятся в разных каталогах, вы все равно можете использовать этот метод, но управление подмодулями немного затруднителен и становится все более раздражающим, если у вас их много.

  2. В качестве альтернативы вы можете хранить свои dev и live репозитории в другой ветке, скажем, под названием with-media, которая всегда совпадает с master, но с коммитами, которые добавляют медиа в конце истории. Вы можете сохранить эту ситуацию с помощью git rebase. Например, если вы только что внесли локальные изменения, которые хотите отправить, вы должны сделать:

    git push origin master
    
    ssh server
    cd dev
    # git branch should show you that you're on 'with-media'
    git fetch origin
    git rebase origin/master
    

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

    ssh server
    cd dev
    git add [whatever-media-files]
    git commit
    git push origin with-media
    

    Теперь, чтобы обновить ваш репозиторий, вы можете просто сделать:

    ssh server
    cd live
    # git branch should show that you're on 'with-media'
    git fetch origin
    git merge origin/with-media
    

    Чтобы настроить эти ветви в первую очередь, вы должны сделать:

    ssh server
    cd dev
    # git branch should show that you're on 'master', since you haven't created
    # the other branch yet:
    git checkout -b with-media
    git push origin with-media
    
    cd ~/live
    git fetch origin
    git checkout -t origin/with-media
    

    В качестве последнего замечания предположим, что вы вносите некоторые изменения в репозиторий dev, которые не просто добавляют медиафайлы, и вы хотите, чтобы эти изменения кода были в вашей ветке master. Затем (перед тем как что-то нажать!) Вам нужно изменить порядок истории с помощью git rebase -i origin/master.

      ssh server
      cd dev
      git rebase -i origin/master
      # Reorder the lines so that the non-media commits are first (earliest) in the file.
      # Save the file and exit your editor.
    
      # Now find the SHA1 sum (object name) of the last commit that has non-media changes.
      # (The object name of the commits will have been changed by the rebase.)
      git log --oneline
    
      # Let's say that was commit f414f3l.  Then you can push just the history up to and
      # including that commit back to the master branch with:
      git push origin f414f3l:master
    
      # Also push your 'with-media' branch back:
      git push origin with-media
    

    В идеальном мире вам не нужно часто делать эти последние шаги, но на практике полезно знать, как это сделать:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...