git을 사용하고 WP 대시 보드에서 업데이트하여 WP 웹 사이트 프로젝트를 어떻게 구성해야합니까?


13

몇 달 동안 나는 WP 대시 보드를 통해 코어 및 플러그인을 업데이트하는 기능을 희생하지 않는 WordPress 웹 사이트 개발을 위해 git 버전 제어를 사용하기위한 좋은 프로젝트 구조를 계획하려고 노력했으며 기존 디렉토리 구조 (wp)를 필요로하지 않습니다. -WP 상위 폴더 외부의 콘텐츠) 및 전체 웹 사이트를 관리하고 배포하기 쉽습니다. 하위 모듈, 하위 트리, 중첩 된 리포지토리 등에 대해 읽었으며 여전히이를 모두 맞추고 올바른 전략을 선택하는 데 어려움을 겪고 있습니다.

괄호 안의 자식 위치를 처리하는 방법에 대한 생각과 함께 지금 생각하고 있습니다.

root (main project repo)
|-- wordpress (public git repo added as subtree)
|    |-- wp-content 
|    |    |-- plugins
|    |    |    |-- my-custom-plugin (git repo added as subtree)
|    |    |    |-- other-plugin-with-git-repo  (git repo added as subtree)
|    |    |    +-- other-plugin-without-git-repo (ignored/untracked)
|    |    |-- themes
|    |    |    |-- my-custom-theme (git repo added as subtree)
|    |    |    |-- other-theme-with-git-repo  (git repo added as subtree)
|    |    |    +-- other-theme-without-git-repo (ignored/untracked)
|    |    +-- uploads (ignored/untracked)
|    |-- wp-admin
|    +-- wp-includes
|-- wp-config.php (ignored/untracked)
+-- other-files.txt

이로 인해 몇 가지 문제 / 질문이 남았습니다.

  • 자동 업데이트; 새로운 자동 업데이트 기능이 마음에 들어 사이트를 업데이트하고 안전하게 유지하는 데 많은 시간과 노력을 절약 할 수 있지만 git을 사용하여 코드 변경 사항을 추적하는 데 렌치를 던지는 것 같습니다. WordPress 코어가 자동 업데이트되도록 허용하면서 코드 변경 사항을 추적 할 수있는 방법이 있습니까?

  • WordPress 핵심 저장소에 하위 트리가 있으면 git을 사용하여 새 핵심 업데이트를 병합하거나 변경 사항을 WordPress 핵심 저장소로 다시 밀어 넣을 수 없습니까 (핵심 기여자가되고 싶은 경우)?

  • 공개 자식 리포지토리가없는 플러그인의 경우 완전히 무시하면 파일을 서버에 수동으로 복사하지 않고 새 서버에서 전체 사이트를 빠르게 복제 할 수없는 문제가 발생합니다. 또한 해당 플러그인의 코드를 변경하려는 경우 해당 변경 사항이 추적되지 않으며 플러그인 업그레이드에서 쉽게 손실 될 수 있습니다.

요약하면, 이러한 문제를 피하는 좋은 git + WordPress 설정은 무엇입니까? 제안 된 프로젝트 구조에 대한 귀하의 의견에 감사드립니다. 이것을 개선하는 데 도움이되는 방법은 대단히 감사하겠습니다!

추신 :이 토론을위한 더 나은 포럼이 있다면, 저에게 알려주십시오.

답변:


6

내 관점에서 Git과 "기존"구조라는 두 가지 계획이 있습니다. 기본적으로 모든 것. :)

  1. 힘내 (및 일반적으로 버전 제어)는 전체 사이트 스택에 좋지 않은 도구입니다. 그곳에 다다 랐습니다.

  2. 컨텐츠를 코어와 분리하여 "전통적인"구조라고 부르는 것은 한동안 심각한 사이트에서 매우 전통적이고 강력한 선택이었습니다.

  3. 전체 사이트 스택과 기본 업데이트를 결합하는 턴키 방법은 거의 없습니다. 서로 다른 수준의 프로젝트 (제어 개발자와 제어 최종 사용자)에서 서로 다른 목표를 달성하려고 시도하기 때문에 잘 어울리지 않습니다.

전체 사이트 WordPress 스택에 가장 적합한 방법은 현재 Composer 이지만, 의견이 경계 할 수 있습니다. :)

특정 관심사에 대해 :

  1. 위와 같이 기본 업데이트 (보다 자동)는 엄격하게 제어 된 스택에서 제대로 작동하지 않습니다.

  2. WordPress 코어는 Git에서 개발되지 않았으며 풀 요청을 수락하지 않으며 패치 파일을 통해 Subversion에 대한 모든 기고가 이루어졌습니다.

  3. 이러한 플러그인을 리포지토리에 커밋해야 할 수도 있습니다. 또는 Composer와 같은 다른 접근법을 사용하십시오.


WordPress는 개발에 Git을 사용하지 않지만 github.com/WordPress/WordPress 에는 15 분마다 SVN에서 동기화되는 미러가 있습니다. SVN & Trac을 반드시 사용해야하기 때문에 패치 등을 푸시하기위한 것이 아닙니다. 이것이 OP의 목적에 적합한 지 아닌지는 모르겠지만 완전성을 위해 존재합니다.
Pat J

@ PatJ 좋은 지적, 나는 Q가 그 하나를 사용하는 것을 의미한다고 가정했지만, 아마도 그렇지 않습니다.
Rarst

아주 좋은 지적입니다. 하위 모듈과 함께 git을 사용하여 전체 사이트 스택을 하나 설정했으며 엉덩이에 큰 고통이 있습니다. 여전히 Git을 활용하는 덜 엄격하게 제어되는 방법이 있는지 궁금하지만 기본 업데이트를 활용하여 약간의 레거시를 절약 할 수 있을지 궁금합니다. 저는 현재 한 사람의 팀이므로 기본적으로 가능한 효율적으로 사이트를 설정하려고합니다.
Josiah Sprague

@JosiahSprague 주요 문제점이 장기 스택 유지 관리가 아닌 초기 설정 인 경우 사용자 지정 install.php루틴이나 그 밖의 것에 초점을 맞추고 정상적인 업데이트 메커니즘을 사용하는 것이 좋습니다. Composer 스택은 추상적으로 업데이트를 매우 잘 처리 할 수 ​​있지만 사용하는 패키지의 품질과 공식 WP 리포지토리 프록시와 같은 것은 아직 성숙하지 않았습니다.
Rarst

3

당신은 한 번 봐 걸릴 수 있습니다 문제와 문제를.

또한 각 리포지토리의 README 파일도 살펴보십시오.

상기 REPOS 바탕 힘내 / WP 설정의 또 다른 예로서, I가 생성 . 테마에 심볼릭 링크를 사용하기로 결정했습니다 ( README에서 다루 려고합니다 ).

나는 자동 업데이트와 같은 보트에 있습니다 ... 업데이트는 업데이트가 발생할 때 WP 하위 모듈을 수동으로 업데이트하는 것이 었습니다. 대안은 이론적으로 (아직 테스트하지는 않았지만) 하위 모듈 자체에 대한 사소한 업데이트 (WP 설정이 있음)를 업데이트 한 다음 git주요 업데이트가 나올 때 하위 모듈을 강제 / 재설정하는 것입니다 ( 아마도 여기에 대한 답변 중 하나가 도움이 될 수 있습니다 ... 물론, 다음 주요 릴리스로 업데이트 할 때 특정 WP 태그를 대상으로하고 싶습니다.)

WP가 .git경로에서 확인하면 자동 업데이트가 자동으로 해제됩니다. 자세한 내용은 다음을 참조하십시오.

자동 업데이트를 사용하려면 몇 가지 간단한 요구 사항이 있습니다.

  • 설치시 업데이트에 FTP를 사용하고 자격 증명을 묻는 메시지가 표시되면 자동 업데이트가 비활성화됩니다.
  • 설치가 SVN 또는 GIT 체크 아웃으로 실행중인 경우 자동 업데이트가 비활성화됩니다.
  • 상수 DISALLOW_FILE_MODS또는 AUTOMATIC_UPDATER_DISABLED정의 된 경우 자동 업데이트가 비활성화됩니다
  • 상수 WP_AUTO_UPDATE_CORE가 false로 정의되면 자동 업데이트가 비활성화됩니다
  • WordPress 설치는 HTTPS 연결을 통해 WordPress.org에 접속할 수 있어야하므로 PHP 설치도 OpenSSL설치되어 작동 해야합니다.
  • Wp-Cron 어떤 이유로 든 cron이 설치에 실패하면 자동 업데이트를 사용할 수 없습니다

다른 관련 링크 :

2015 년 5 월 갱신

WordPress 프로젝트를 빠르게 시작할 수있는 이 레포 를 만들었습니다 . 내 최신 접근 방식은 테마 버전 만 제어하는 ​​것입니다. 다시 말해서, WP를 로컬로 (앞서 언급 한 repo의 설정을 사용하여) 설치하고 프로덕션에 설치 한 다음 각 시스템에서 구성 파일을 수정하고 git테마를 가져와 기능적인 사이트를 가져옵니다.


2

이러한 유형의 개발은 "그다지 쉽지는 않으며 만족하기까지 시간이 오래 걸릴 수있는 사용자 지정 워크 플로가 필요합니다"에 속합니다.

하위 트리, 하위 모듈 또는 중첩 된 repos, 엉덩이에 큰 고통이 있습니다.

일부 생각 (모든 것을 추적).

  1. 다음을 사용하여 git / svn으로 자동 업데이트를 활성화하십시오.
    add_filter( 'auto_upgrade_ignore_checkout_status', '__return_true' );

수동 커밋 + 이메일을 통한 안전한 방법 :

준비 서버와 전자 메일 업데이트 알림을 사용하고 업데이트를 커밋하고 자동 업데이트가 해제 된 라이브 서버로 푸시 할 수 있습니다.

이것은 또한 당신이 원하는대로 자신의 repos에 대한 폴더를 복사 / 붙여 넣기 할 수있게 해줍니다. 또한 여러 준비 서버를 쉽게 복제 / 파기 할 수 있습니다. git은 배포 된이 방법으로 실제로 적용됩니다.

단점 : 폴더 복사 / 붙여 넣기, 관리.

자동 방법

업데이트가 적용될 때 git add + commit을 수행하는 빌드 스크립트 (Phing, Ant, Bash, Capistrano 등) 및 일부 사용자 정의 코드를 설정하여 라이브 서버로 전송하십시오. 플러그인 / 테마 리포지토리를 분리 한 다음 스크립트를 컴파일 / 이동 / 무엇으로 만들거나 믹스에서 컴포저를 사용할 수도 있습니다.

이와 같은 워크 플로를 자동화하는 것도 융통성이 없어 투자 시간이 실제로 필요한 경우에만 가치가 있습니다.

단점 : 융통성이 없으며 만드는 데 시간이 걸립니다.

Git은 백업에 사용해서는 안되며 일반적으로 WP의 커밋 기록을 복제 할 필요가 없습니다.


0

더 많은 생각을 한 후에, 기본 WP 업데이트를 사용하여 레거시를 절약하고 싶기 때문에 WP가 git을 사용하여 업데이트 할 항목을 추적하는 것은 의미가 없습니다. 수정 된 아이디어가 있습니다.

root (main project repo)
|-- wordpress (ignored/untracked)
|    |-- wp-content 
|    |    |-- plugins
|    |    |    |-- my-custom-plugin (git repo not connected to parent)
|    |    |    |-- other-plugin (ignored/untracked)
|    |    |    +-- modified-plugin (unignored, added to main project repo)
|    |    |-- themes
|    |    |    |-- my-custom-theme (git repo not connected to parent)
|    |    |    |-- other-theme (ignored/untracked)
|    |    |    +-- modified-theme (unignored, added to main project repo)
|    |    +-- uploads (ignored/untracked)
|    |-- wp-admin
|    +-- wp-includes
|-- wp-config.php (ignored/untracked)
+-- other-files.txt

물론 VCS 내에서 어떤 플러그인과 테마가 프로젝트의 일부인지 추적하는 기능을 잃어 버릴 수 있지만 실제로는 백업 목적으로 만 필요하며 어쨌든 일종의 일반 백업 시스템을 사용하게됩니다.

따라서 이것이 실제로 부족한 유일한 것은 FTP를 사용하여 전체를 수동으로 복사하지 않고 전체 스택을 다른 서버에 쉽게 배포하는 기능입니다. 아무도 그것에 대해 생각이 있습니까?


0

좋아, Mark Jaquith의 이야기를 여기서 보았을 것입니다. 아마도 잘못된 길을 가고 있습니다. 여기에 모든 것을 추적하는 또 다른 찌르기가 있습니다.

   root (main project repo)
    |-- wordpress (repo as subtree)
    |-- wp-config.php (ignored/untracked)
    |-- wp-content 
    |    |-- plugins
    |    |    |-- my-custom-plugin (repo as subtree)
    |    |    |-- other-plugin-with-git-repo (repo as subtree)
    |    |    +-- plugin-without-git-repo
    |    |-- themes
    |    |    |-- my-custom-theme (repo as subtree)
    |    |    |-- other-theme-with-git-repo (repo as subtree)
    |    |    +-- theme-without-git-repo
    |    +-- uploads (ignored/untracked)
    +-- other-files.txt

나는 이것의 주요 단점은 사용자 정의 컨텐츠 디렉토리를 가지고 있다고 생각합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.