詳細検索

OPS인데, git ~ 파트 1을 써봤어요

아바타
글쓴이 komi

OPS인데, git ~ 파트 1을 써봤어요
日本語에서 번역 • 원문 보기

안녕하세요. 저는 코미야입니다. OPS이지만 git ~ Part 1을 써봤기 때문에 github, gitlab, git 초보자라서 잊지 않으려고 메모를 남길게요. 이번에는 더듬거리며 밀어붙일 때까지 계속하겠습니다. 브랜치를 잘라내면 처음 쓰면 꽉 차게 됩니다. 아마 2부까지도 가능할 거예요. 2부는 분기, 태그, 그리고 교합에 관한 내용입니다.

배경 및 장단점

·배경 최근 지속적 통합 덕분에 chef에서 서버 구축 수요가 생겼고, 그 기회를 얻어 저장소 버전 관리를 위해 git을 사용하기로 결정했습니다. 처음에는 회사의 엔터프라이즈 버전 GitHub에 저장했지만, VPN을 통한 소통 수요가 증가하면서 gitlab을 도입하기로 했습니다. ·git의 장점 역사를 따를 필요가 없습니다. 시각화. 파일의 차이가 쉽게 보여서 브라우저에서 쉽게 확인할 수 있습니다 ·GitHub의 단점 제 동료들은 git을 사용하기 시작하지 않습니다(필요 없으면 바빠서 진행하는 경향이 있습니다). 음, 당신의 기분을 이해합니다. 저도 반쯤 억지로 만든 느낌이었습니다.

GitHub와 gitlab의 차이점 git 명령어 측면에서 큰 차이는 없을 것 같지만, 시스템이 오픈 형태(엔터프라이즈 모드로 닫을 수 있음)나 닫힐 수 있는지 확인해 보면 좋을 것 같습니다. gilab의 경우 용량 제한도 환경에 따라 디스크 공간 등 세밀하게 설정할 수 있습니다. VPN을 거치지 않아도 되는 자유가 생깁니다. 공유 웹 서비스를 사용하는 것과 직접 구축하는 것의 차이입니다. 최근 Chef에 쉽게 입력할 수 있는 레시피가 생겨서 gilab 도입 시간과 노력이 줄어든 것 같습니다.

GitHub의 경우 2단계 인증을 개선하세요

 자세한 내용은 말하지 않겠지만, 먼저 깃허브에 등록하고 회사의 깃허브 2단계 인증을 관리하세요 → 회사에서 준비한 매뉴얼을 따르세요. 요약하자면, 이것은 Gmail의 2단계 인증과 비슷하며, 휴대폰에서 SMS 알림을 받았을 때 인증하는 메커니즘입니다.

 연결하려는 호스트에서 SSH 키를 만들고, 생성된 공개키를 GitHub 사용자 프로필에 등록하세요.

푸시하려는 호스트에서 git을 초기화하세요

먼저, git 명령어를 입력한 사람의 사용자 정보를 등록하세요.

git config --global user.email "komiyay@xxxxx"'
git config --global user.name "Yxxx Komiya" 

구성 파일에서 메모리 제한이나 스레드 수를 지정하지 않으면 OutOfMemory 오류가 발생합니다.

$ vi ~/.gitconfig
[사용자]
        이메일 = komiyay@xxxxx
        이름 = Yxxx 코미야
[핵심]
        packedGitWindowSize = 128m
        packedGitLimit = 128m
[팩]
        windowMemory = 128m
        스레드 = 2
        deltaCacheSize = 128m
        packSizeLimit = 128m

*이 설정을 약 m1.small으로 설정했습니다. T1.micro에 메모리 오류가 발생했습니다.

메모리 오류 메시지:

치명적: 기억 밖, Malloc 실패 9.59 MiB | 4.16 MiB/s
오류: 팩 객체가 이상한 오류로 죽음
git 저장소를 등록하고 add와 커밋으로 푸시하세요

당신이 만든 저장소 설명에 따라 명령어를 실행하겠습니다. *저장소를 생성할 권한이 없습니다(회사의 개인 저장소이기 때문입니다). 등록하려는 셰프 저장소로 이동한 후에는 다음 작업을 실행하세요.

터치 README.md
git init
git add README.md
git commit -m "첫 번째 커밋" 
git remote add origin git@github.com:Isaoxxxx/xxx-chefrepo.git
git push -u Origin Master

git remote add를 하면 다음과 같은 것을 볼 수 있습니다:

$ git remote -v
출처 git@github.com:Isaoxxxx/xxx-chefrepo.git (fetch)
출처 git@github.com:Isaoxxxx/xxx-chefrepo.git (push)
git push 실패

그 이유는 제가 실수로 100MB 이상의 큰 파일을 커밋했기 때문입니다. (github의 경우. gitlab에는 특별한 제한이 없습니다) 100MB를 넘지 않으면 미들웨어 아카이브는 상대적으로 쓸모없는 것 같습니다. 원격 리소스를 사용하거나 git 클론 후에 다운로드해야 하는 것 _file 같습니다.

$ git push -u 오리진 마스터
경고: IP 주소 '192.30.252.128'의 RSA 호스트 키가 알려진 호스트 목록에 영구적으로 추가되었습니다. 
물건 계산: 557개, 완료. 
최대 2개의 스레드를 사용하는 델타 압축. 
객체 압축: 100% (451/451), 완료. 
객체 쓰기: 100% (557/557), 587.22 MiB | 11.26 MiB/s, 완료. 
총 557대 (델타 126), 재사용 0대 (델타 0)
remote: error: GH001: 대형 파일 감지. 
원격 처리: 오류: 트레이스: 5f467e50268ce9aec1f53188e8e52882
remote: error: 자세한 내용은 http://git.io/iEPt8g 참조. 
remote: error: file-site-cookbooks/java/files/default/usr/local/src/jdk-7u45-linux-x64.rpm 크기는 116.91 MB; 이는 GitHub의 100 MB 파일 크기 제한을 초과합니다
remote: error: file-site-cookbooks/mysqld/files/default/usr/local/src/MySQL-5.6.15-1.linux_glibc2.5.x86_64.rpm-bundle.tar 크기가 294.62 MB; 이는 GitHub의 100MB 파일 크기 제한을 초과합니다
remote: error: file-site-cookbooks/play/files/default/usr/local/src/play-2.2.1.zip 크기가 104.82 MB; 이는 GitHub의 파일 크기 제한인 100MB를 초과합니다
git@github.com: Isaoxxxx/xxx-chefrepo.git
 ! [원격 거부] 마스터 -> 마스터 (수신 전 후크 거부)
오류: 일부 참조를 'git@github.com:Isaoxxxx/xxx-chefrepo.git'로 푸시하지 않음 

오류 메시지 내 URL ↓ 영어. 대형 파일 작업 · GitHub 도움말 단순히 'git rm'과 'git commit'만으로는 충분하지 않았습니다. 아래 URL에서 보듯이, 특수 작업이 필요했습니다. 100MB가 넘는 파일을 커밋했는데 GitHub가 푸시를 거부하면

$ git filter-branch --force --index-filter 
  'git rm --cached --ignore-unmatch site-cookbooks/play/files/default/usr/local/src/play-2.2.1.zip'  
  --가지치기-비어 --태그-이름-필터 고양이 -- --모두

$ git filter-branch --force --index-filter 
  'git rm --cached --ignore-unmatch site-cookbooks/java/files/default/usr/local/src/jdk-7u45-linux-x64.rpm'  
  --가지치기-비어 --태그-이름-필터 고양이 -- --모두

$ git filter-branch --force --index-filter 
  'git rm --cached --ignore-unmatch site-cookbooks/mysqld/files/default/usr/local/src/MySQL-5.6.15-1.linux_glibc2.5.x86_64.rpm-bundle.tar'  
  --가지치기-비어 --태그-이름-필터 고양이 -- --모두

$ git commit --amend -CHEAD

저는 다시 침착함을 되찾고 밀어붙였고, 성공했습니다.

$ git push -u 오리진 마스터
물체 수: 533개, 완료. 
최대 2개의 스레드를 사용하는 델타 압축. 
객체 압축: 100% (439/439), 완료. 
쓰기 객체: 100% (533/533), 79.03 MiB | 5.44 MiB/s, 완료. 
총 533대 (델타 119), 재사용 0대 (델타 0)
git@github.com: Isaoxxxx/xxx-chefrepo.git
 * [새 분기] 마스터 -> 마스터
브랜치 마스터는 원격 브랜치 마스터를 출발지에서 추적하도록 설정되어 있습니다. 

GitHub를 확인했을 때 등록이 성공했습니다.

업로드해서는 안 되는 파일 업로드에 대한 답변

확인해보니 실수로 데이터_bag_key도 업로드해서 github에서 삭제했습니다. 브라우저에서 수정했더니 이번에는 병합하지 않으면 푸시할 수 없는 오류가 떴습니다. 경쟁하는 것 같습니다.

$ git push -u 오리진 마스터
git@github.com: Isaoxxxx/xxx-chefrepo.git
 ! [거절됨] 마스터 -> 마스터 (빨리 감기 아님)
오류: 일부 참조를 'git@github.com:Isaoxxxx/xxx-chefrepo.git'로 푸시하지 않음 
기록 손실을 방지하기 위해 비빨리 감기 업데이트는 거부되었습니다
다시 푸시하기 전에 리모컨 변경 사항을 병합하세요. '노트'를 참조하세요
자세한 내용은 'git push --help'의 Fast-Forwards 섹션에서 확인할 수 있습니다. 

머지는 어떻게 하나요? 조금 조사해보니, 당분간은 페치(fetch), 풀(pull), 푸시(push)하는 게 더 나을 것 같았습니다. 풀링은 내부적으로 페치 + 머지와 같은 것 같습니다.

이 상태로 git을 불러왔을 때, 로컬 파일이 예상대로 사라졌습니다. 우선 이 키는 복사된 백업 파일이고 .gitignore에 등록되어 있어서 다시 복사했습니다

$ cp -p .. /.chef/encrypted_data_bag_secret ./data_bag_key
$ cat .gitignore
/요리책/ 
data_bag_key

'$ git status'를 시도해도 업데이트 파일이 없었습니다. 그래서 브라우저에서 'git push'로 확인했을 때, 업데이트된 '.gitignore'가 업데이트되었고, 삭제하고 '.gitignore'에 추가한 'data_bag_key'를 찾을 수 없어서 의도한 대로 된 것 같습니다.

업로드해서는 안 되는 파일을 브라우저에서 삭제하는 대신 명령어로 할 수 있는데, 저는 git에 게시하지 말아야 할 파일을 실수로 추가했을 때 참고로 사용했습니다.

git filter-branch --index-filter 'git update --index --remove "filename" 'HEAD
git 커밋 -a
가서 밀어... 

그렇게 하는 게 더 나은 것 같아요.

결론

로컬 저장소를 업데이트하면 다음을 사용할 수 있습니다.

git add
git commit -m "history" 
git push

원격 저장소에서 업데이트한다면

git fetch
git pull

로컬 저장소에서 공유하고 싶지 않은 파일을 '.gitignore'에 추가하세요. 로컬 저장소에서 '추가' 후 '커밋' 전에 전체 파일을 삭제하면,

git rm 파일명

로컬 저장소에 추가하고 커밋 전에 인덱스만 삭제하면,

git reset 머리 -- <file>

역조회도 유용했습니다. 기본 연산 | 역조회, git | 원숭이도 이해할 수 있는 git에 대한 입문 - 버전 관리를 마스터합시다 - 요리사로서 다시 사용하기 쉽게 README를 제대로 작성하는 것이 필요해 보입니다.

현재는 주로 gitlab을 사용하고 있습니다. 닫는 기능은 별로 좋아하지 않습니다.

읽어주셔서 감사합니다. 다음은 다음과 같습니다.

Related Articles