SSH에서 Git을 사용하여 특정 디렉터리 가져오기
완전히 초보적인 질문입니다만, Git에서 SSH를 사용하는 경우의 베스트 프랙티스는 무엇입니까?워드프레스 프로젝트를 하고 있어요.루트에는 서버상에 gulp 및 기타 개발 파일/폴더(SAS나 스크립트 등)가 있으며, 같은 프로젝트에는 테마와 몇 개의 커스텀 플러그인이 포함된 WordPress 폴더가 있습니다.테마나 플러그인을 도입할 준비가 되었을 때 상상할 수 있듯이 서버의 저장소에 있는 모든 것을 가져오고 싶지 않습니다.지금까지 저는 항상 저장소 전체를 끌어다밀고 FTP를 사용하여 필요한 것을 서버에 업로드했습니다만, SSH와 Git에서는 어떻게 할 수 있고, 셋업을 할 수 있는 더 좋은 방법이 있을까요?
편집: 질문을 좀 더 명확하게 하기 위해 제가 생각하는 문제의 예를 들어 보겠습니다.메인 프로젝트 폴더에서는 WordPress 폴더 옆에 SAS 폴더가 있습니다.서버에 전개할 필요가 있는 것은 WordPress 폴더 뿐입니다.개발 기계에서 발생하는 빌드 프로세스는 모든 SAS 파일을 단일 CSS로 결합하고 WordPress 폴더에 배치합니다.SAS 폴더는 Git에 의해 추적되어야 합니다. 그러면 다른 개발자가 SAS 폴더를 가져와 계속 개발할 수 있기 때문에 Git이 이를 무시할 수 없습니다.그러나 이러한 SAS 파일은 WordPress가 작동하기 위해 서버에 있을 필요가 없습니다.WordPress 폴더와 그 안에 있는 모든 것을 전개하기만 하면 됩니다.
서버에 빈 저장소를 만들고 수신 후 후크를 사용하여 웹 루트 외부에 있는 git 폴더를 가리키고 웹 루트가 어디에 있는지를 가리킨다는 생각을 이해합니다.하지만 기본적으로 GIT와 SSH는 그렇게 작동하지만 내 우려에는 대답하지 못한다.
Git 사용 안 함
Git은 특정 파일이나 디렉토리만 끌어오도록 설계되지 않았습니다.이 그래프는 이진 블럽을 개체로 하는 방향성 비순환 그래프입니다. 때로는 여러 개체가 하나의 큰 개체로 압축되기도 합니다.
Git 디자인으로 인해 구체적인 요청이 불가능합니다.
대체 수단
후크
웹사이트가 단순한 정적 파일만 포함하고 있다면 SSH를 통해 git 저장소에 푸시하는 것이 좋습니다. 실제로 텍스트 이외의 파일이 없는 한 저장소가 커질 가능성은 거의 없습니다.
다음의 설정을 예로 들 수 있습니다.
/var/lib/www
apache - apache web dir - apache web dir - copy - 의 web dirwww.git
/var/lib/www.git
git - bare git 장소소 。/var/lib/www.git/hooks/post-recieve
측 Hook - 서버 측 Git Hook. - 서버 측 Git Hook." " " 를 셸일 수 .www
이 저장소가 업데이트되면 저장소로 이동합니다.
★★post-recieve
「 」 「 」:
#!/bin/bash
cd /home/sam/sandbox/git-hooks/www
unset GIT_DIR
git fetch origin master
git reset --hard origin/master
tar.gz의 빌드 압축
빌드 종료 시 파일을 tar.gz로 압축할 수 있습니다.이 파일은 어딘가에 호스트 되어 있을 것입니다(GitHub를 사용하고 있는 경우는 GitHub가 릴리스 될 가능성이 있습니다).일부 기업에서는 Nexus 또는 Architectory와 같은 사내 아티팩트 호스팅을 사용합니다.
즉, 특정 sha256sum을 가진 테스트된 아티팩트가 있다는 것입니다.테스트하는 아티팩트는 결국 프로덕션으로 넘어가는 아티팩트와 완전히 동일합니다.
지속적인 통합, 지속적인 제공, 소프트웨어 개발 수명 주기 등의 자세한 내용은 질문의 범위를 벗어나는 경우가 있습니다.
베스트 프랙티스 없음
Git은 소스 제어용이지 전개가 아닙니다.git은 전개 툴이 아니기 때문에 git을 사용하는 베스트 프랙티스는 없습니다.서버에 git 이력도 필요 없습니다.실제로 git을 도입에 사용하는 것을 고집하지 않는 한 git은 전혀 필요하지 않습니다.이런 식으로 사용하는 것은 환영이지만, 당신이 묻는 바로 그런 종류의 문제 때문에 이상적인 것은 아닙니다.
베스트 프랙티스는 무엇입니까?
전개 처리에 사용할 수 있는 툴은 여러 가지가 있습니다.일반적으로 대부분의 도구를 사용하면 원하는 환경에 코드를 배포할 수 있는 일련의 단계를 설정할 수 있습니다.PHP 세계에서는 Ping이나 Deployer와 같은 간단한 도구를 사용할 수도 있고, 더 복잡한 요구가 있는 경우에는 Puppet이나 Chef와 같은 보다 정교한 도구를 사용할 수도 있습니다.필요한 것이 정말로 매우 간단한 것이라면 직접 bash 스크립트를 작성할 수 있습니다.제공하신 정보를 바탕으로 Ping 또는 Deployer를 권장합니다.https://deployer.org/ https://www.phing.info/
타겟 박스에 SSH 하고 싶은 툴을 설정해, 원하는 파일만을 서버상의 디렉토리에 카피합니다.이러한 툴은, 임의의 방법으로 카피할 수 있습니다.보통 스크립트 복사 파일을 temp dir에 저장하여 tarball하고 ssh로 덮어쓰고 untar를 수행합니다.그 후 일반적으로 서버에서 파일을 이동하거나 심볼링크를 변경하거나 기타 필요한 작업을 수행합니다.
컴파일된SAS, ES6 js 파일 또는 최신 정적 파일은 어떻습니까?
필요한 것은 스태틱파일의 핸들링과 그 파일의 이동처입니다.파일을 푸시업 할 때 생성된 스태틱파일을 tarball에 포함시키고, 언타일을 해제하면 서버의 올바른 디렉토리에 저장합니다.
SAS 컴파일러 및 기타 미리 컴파일된 정적 코드를 구성할 때 대상 파일을 생성하도록 구성했습니다.즉, 생성되는 실제 CSS 및 JS의 파일입니다.필요한 것은 이것뿐입니다.또, 워드프레스 테마내에 행선지 디렉토리가 설정되어 있는 경우는, 그 처리에 특별한 주의를 기울일 필요도 없습니다.서버상에 있는 경우는, 다른 장소로 이동할 필요가 있습니다만, 이것은 모두 서버의 특정의 설정에 의해서 다릅니다.이것은 이 질문의 범위외라고 생각합니다.
기타 주의사항:
당신은 이것에 대해 묻지 않았지만, 나는 당신이 업데이트 할 때마다 워드프레스 저장소 전체를 보내서는 안 된다는 것을 언급할 가치가 있다고 생각했다.컴파일되지 않은 SAS 코드가 필요하지 않은 것처럼 핵심 WordPress를 다시 패키지화할 필요도 없습니다.핵심 Word Press를 실행할 필요도 없습니다. Word Press는 종속성이며 변경할 필요도 없습니다.
사용자가 커밋해야 할 것은 테마와 플러그인 코드, 그리고 컴파일되지 않은 정적 파일뿐입니다.컴파일된 정적 파일 및 WordPress 코어 같은 외부 종속성은 git 이력에 속하지 않습니다.배포를 위해 WordPress가 이미 설치되어 있어야 합니다.tarball에 있는 것은 플러그인과 테마뿐입니다.또한 스태틱파일이 아직 존재하지 않는 경우는, 추가의 스태틱파일로 할 필요가 있습니다.
TLDR;
이거에 git 쓰지 마세요.Phing 또는 Deployer와 같은 도구를 사용합니다.스태틱 파일을 테마에 짜넣고, 필요한 코드만을 tarballing 해, SSH 를 서버에 건네고, 그것을 원하는 디렉토리에 언타링 하는 ping/deployer 스크립트를 작성합니다.서버상에 스태틱파일을 보관하는 특별한 장소가 있는 경우는, 그 순서를 스크립트에 추가해 주세요.
그래서 당신의 질문과 코멘트에 따르면 세 대의 컴퓨터가 관련되어 있습니다.웹 서버(이 시나리오에서는 "서버"라고 하면 웹 서버 또는 웹 서버 프로그램을 실행하는 서버 컴퓨터)가 있습니다.git repo가 호스트되는 다른 서버가 있습니다.그리고 개발 워크스테이션이 있습니다.이거 맞는건가요?
웹 서버에 복제된 git repo가 있는 것 같습니다.현재의 프랙티스/워크플로우는 (1) ("SSH'ed in my server"라는 표현에 따라) 워크스테이션에서 SSH(Telnet과 마찬가지로)를 통해 웹 서버에 로그인하는 것으로 보입니다(SSH는 프로토콜에 불과하며 다른 용도로 사용할 수 있습니다).(2) 호스트된 서비스(예: github)에서 repo를 가져와 (3) 동일한 서버의 "www" 디렉토리에 전개합니다.이거 맞는건가요?
(당신이 사용한 「FTP」등의 단어에 근거해 대체 시나리오를 생각할 수 있습니다만, 우선은 상기의 시나리오에 주목해 봅시다.)
(웹 서버에서) 풀(pull)을 할 때마다 호스트된 서비스의 레포에서 모든 것을 풀(pull)하는 것처럼 느껴집니다.그리고 더 좋은 방법이 있을까요?제가 당신의 질문을 제대로 이해한 건가요?
만약 그렇다면, 다른 코멘터가 제안했듯이, git(그리고 일반적으로 모든 버전 관리 시스템)은 "deltas"만 가져오는 데 매우 능숙하다.만약 당신이 매번 당길 때마다 "모든 것을 꺼내는 것"에 대해 걱정한다면, 당신의 걱정은 근거 없는 것이다.
자, 질문은, 만약 그것이 사실이라면, 왜 당신의 웹 서버에 git repo가 있는가 하는 것입니다.이것은 꽤 정당한 설정이며, 이전에 (EC2등에서) 이 작업을 한 적이 있습니다.단, 일반적으로 '실가동' 서버에서는 사용하지 않는 것이 좋습니다.웹 앱을 "구축"해야 하고 실제 가동 서버에서는 그렇게 하고 싶지 않기 때문입니다.
다음 질문은 스텝 (3)에서 정확히 무엇을 하고 있는가 하는 것입니다.빌드 프로세스(사용하는 프로세스에 관계없이)는 통상, Web 서버에 직접 전개할 수 있는 「출력」을 생성합니다(통상, 출력은 「퍼블릭」, 「www」, 「디스트」등의 1개의 폴더 또는 1개의 파일(tar.gz, zip, jar, war 등).전개 가능한 출력을 개발 워크스테이션(또는 빌드 머신) 또는 웹 서버에 구축하더라도 일반적으로 이 컨텍스트에서는 "델타"를 수행하지 않습니다.1개의 파일(예를 들어 CSS 파일)만 변경한 경우에도 일반적으로 (변경된 CSS 파일만 교체하는 것이 아니라) 출력 전체를 다시 작성합니다.FTP를 사용하여 파일 등을 업로드 할 때 특정 파일 및/또는 디렉토리 등을 선택적으로 업로드할 수 있지만 일반적으로는 업로드하지 않습니다.델은 항상 완전한 출력을 처음부터 구축하여 웹 서버에 도입합니다(이는 잠재적인 도입 오류를 줄이고 신뢰성을 높이기 위한 것입니다).
그래서 당신의 질문에 답하기 위해 (A) 만약 당신이 웹 서버에서 git repo를 풀하고 있다면, 당신은 정말로 그 관행을 바꾸고 개발 컴퓨터나 전용 빌드 머신으로 빌드 프로세스를 이동해야 합니다. (BTW, gitub, gitlab, TFS 등의 서비스는 당신을 위해 빌드 서비스를 제공합니다.(B) 현재 웹 앱 파일을 선택적으로 웹 서버에 FTP하고 있다면 정식 빌드 및 배포 프로세스를 채택하는 것을 고려해야 합니다.
SAS 빌드 프로세스가 완료된 후 사용scp
또는rsync
파일을 Prod 서버로 이동하려면:
scp -r /[local wordpress dir]/wp-content/themes/your-theme/ username@your.prod.server.com:/path/to/dir/wordpress/wp-content/themes/
scp -r /[local wordpress dir]/wp-content/plugins/* username@your.prod.server.com:/path/to/dir/wordpress/wp-content/plugins/
I am working in a project and using git ssh with bitbucket following is the process i am using it may work for you also if not please correct me :
Step 1 ->I have setup git and create repo in bit-bucket.
Step 2 ->And setup project with my local and linked with my repo.
Step 3 ->connect my server using ssh.
Step 4 ->Work in my local and commit and push all changes in my git repo.
Step 5 ->Run git pull on ssh so all changes deployed in my server.
I am using above process and i love this process.i have used .gitignore file that is not required for push on my repo.
Thanks
언급URL : https://stackoverflow.com/questions/47271880/use-git-in-ssh-to-pull-specific-directories
'itsource' 카테고리의 다른 글
JSON 문자열을 저장하는 데 가장 적합한 SQL 데이터 유형은 무엇입니까? (0) | 2023.03.23 |
---|---|
ReactJS에서 클릭 이벤트를 수동으로 트리거하는 방법 (0) | 2023.03.23 |
MongoDB - 관리자 사용자에게 권한이 없습니다. (0) | 2023.03.23 |
Zurb Foundation 탑바가 전혀 작동하지 않음 (0) | 2023.03.23 |
jq 배열에서 값 선택 (0) | 2023.03.23 |