라이믹스 설치 때문에 이제서야 알게 돼서 구글링해보고 적용했는데


이전에는 일단 코어 수정해놓은 내역 일일히 다 기록해 놨다가, xe 새 버전이 릴리즈되면 changes 파일 받아서 수정내역이랑 겹치는 파일이 있나 하나하나 눈으로 다 찾아본 다음에


혹시라도 겹치는게 있으면 모니터 양쪽에 띄워 놓고 수정사항 직접 수동으로 반영해서 업로드하고 그랬는데...


git으로 설치했으면 그냥 그럴 필요 전혀 없이 git pull 하나만 해 주면 알아서 수정내역만 쫙 가져오네요


따로 수정한게 뭐 있나 찾아야 할 때도 일일히 뒤질 필요 없이 git status로 한번에 뽑아오고


이렇게 편할 줄은 몰랐네요. 진작에 알았다면 온갖 뻘짓같은거 안 했을텐데...


처음에 git 찾아보니까 거의 대부분이 개발자들이 참고할 만한 내용밖에 없어서 깃허브에서 포크를 뜨고 소스트리로 작업하면서 해야 하나 생각했는데


(이거때문에 괜히 깃허브에서 제 계정으로 포크뜨고 설치하고 나서 원본파일 변경사항은 어떻게 받아오나 upstream을 등록해야 하나 하고 알아보느라 한참 걸렸네요)


그냥 파일만 받아서 쓰는 일반 사용자이고 서버에서 git을 지원하면 그럴 필요가 전혀 없이 그냥 서버에 clone 받아서 설치하면 끝이더군요


알고보니 엄청 간단한데 괜히 하기도 전에 겁먹었네요


호스팅 사용자의 경우 텔넷에 접속할 수 없거나 git을 지원 안 하는 경우도 있는데 사용하고 있는 루아틱에서는 전부 지원하기도 하고..

  • profile
    서드파티모듈 설치했을때 git status 에 잔뜩 뜨지 않던가요?ㅎ
  • profile ?
    아 참....

    이거 보니까 갑자기 의문이 생기네요

    전에 처음에 제 깃허브 계정으로 포크를 뜬 라이믹스를 설치하고 나서 git status 해보면 서드파티가 잔뜩 떴던거 같은데

    그 이후에 라이믹스 원본 계정걸로 설치하느라고 다른 폴더에 오리지날 계정 설치하고 나서 .git 폴더 붙여넣고 나니까

    git status를 쳤을 때 서드파티가 안 나오고 코어 수정본만 뜬 거 같네요??

    뭐지... 원래 서드파티 자료들도 쫙 뜨지 않나요? 갑자기 혼란이 오네요

    지금 컴퓨터를 못 해서 확인도 못 해보고... 뭔가 잘못된건지 아님 그냥 제가 잘못 본건지;;
  • profile ?
    아, 잘못 본게 맞네요. 밑에 Untracked files 라고 쭉 뜨네요. 괜히 놀란듯..;;
  • profile

    git을 사용한 사이트 운영 팁 몇 가지...

     

    1. 공식 저장소에서 업데이트된 내역과 내가 수정한 내역이 겹치면 git pull 도중 충돌(conflict)이 발생하면서 에러가 납니다. 이런 일이 잦다면 나만의 브랜치를 만들어서 변경내역을 따로 커밋하고, 정기적으로 master 또는 develop 브랜치와 merge하는 것이 안전합니다. 브랜치는 깃허브에 만들 필요 없고 그냥 내 서버에 만들어 쓰면 됩니다. 커밋하지 않은 변경내역은 git에서 관리능력이 떨어집니다. 커밋해야 제대로 관리가 됩니다.

     

    2. git status를 해보면 서드파티 모듈, 애드온, 레이아웃, 스킨 등이 지저분하게 나옵니다. 코어에 포함되지 않은 파일이니 모두 내가 추가한 것으로 나오지요. 이 때 git add 명령을 잘못 사용하기라도 하면 서드파티 자료까지 모조리 커밋되어 버려서 골치아프게 됩니다. 이런 것들은 .gitignore에 추가해도 되지만, 공식 저장소에서 .gitignore가 업데이트될 수도 있고 실수로 .gitignore를 무시하는 명령을 내릴 수도 있으므로 .git/info/exclude 파일에 추가하는 것이 더 확실합니다. 이 파일에 추가한 경로는 무조건 무시됩니다.

     

    3. 서드파티 자료들 중에도 깃허브를 사용하는 것이 있다면 마찬가지로 설치할 수 있습니다. 예를 들어 알림센터 모듈은 modules 폴더에 들어가서 git clone https://github.com/xe-public/xe-module-ncenterlite.git ncenterlite 이렇게 명령을 내리면 ncenterlite 폴더에 정확하게 설치됩니다. (라이믹스라면 알림센터를 별도로 설치할 필요가 없지만, 예를 들어서 그렇다는 겁니다 ㅎㅎ)

     

    4. 라이믹스는 이런 일이 드물지만, XE의 경우에는 깃허브에 올라온 패치(PR)을 직접 다운받아서 적용해 보고 싶을 때가 많습니다. git fetch origin pull/1234/head:pull/1234 이렇게 명령을 내리면 1234번 PR의 패치 내역이 pull/1234라는 브랜치에 다운로드됩니다. 여기서 git merge pull/1234 명령을 사용하면 그 패치 내역을 현재 브랜치에 merge할 수 있습니다. 원하는 패치를 마음대로 골라 쓸 수 있지요.

  • profile ?
    감사합니다. 하나같이 유용한 팁들이네요. 1번은 공식계정을 클론받은 다음에 브랜치 생성명령으로 브랜치를 따로 만들고 그곳에 변경사항 커밋하라는 말씀이시죠?

    3번은 업데이트시에 일일히 모듈폴더에 들어가서 pull 명령어를 해 줘야 하나요? 만약 라이믹스 설치폴더에서 modules/모듈명 이런 식으로 설치할 경우엔 어떻게 되나요?
  • ? profile
    네, 공식 저장소와 공유하는 브랜치에서 나만의 커밋을 추가하면 나중에 귀찮아져요. 별도 브랜치가 편합니다. git은 브랜치를 무한정 만들어 써도 돼요.

    업데이트는 별도로 해야 합니다. 2번 팁처럼 라이믹스/XE 쪽에서는 해당 폴더 예외 처리하시고요.
  • profile ?
    해보니까 쉽네요. 새 브랜치 만들고 옮겨간 다음 modified 전부 커밋하고 Untracked files들은 모조리 exclude에 추가하고 나니까 드디어 working directory clean이라고 뜨네요. 이제 이 상태에서 git pull origin develop 해준 다음 git merge develop 하면 되는 거겠죠?

    그리고 3번 보니까 일일히 각 모듈/애드온 폴더까지 찾아가서 pull 해줘야 하는 거 같은데, 불편하지 않나요? 뭔가 다른 방법이 있는건지...
  • ? profile

    새 브랜치에서 git pull origin develop 하면 현재 브랜치를 develop으로 덮어씌우려고 시도합니다. 운영중인 사이트에서는 다소 위험부담이 있어요.

    git fetch origin develop:develop 이렇게 우선 develop 브랜치에만 변경내역을 덮어씌운 후,
    git merge develop 명령으로 합쳐주면 깔끔하게 됩니다.

     

    어차피 git으로 관리되는 서드파티 자료는 별로 없고, 관리자 화면에 업데이트가 떴을 때만 한두 개씩 해주면 되므로 크게 귀찮지는 않아요. 한꺼번에 모든 자료를 업데이트해야 하는 경우는 드뭅니다.

  • profile ?
    아, git pull origin develop 하면 develop 브랜치에 변경내역을 받아오는 줄 알았는데 아니었네요. 역시 잘 모르는건 하기 전에 먼저 질문한게 다행이었네요;;;

    한가지 궁금한게, pull이라는 건 fetch+merge 라고 하던데, git fetch origin develop:develop 라고 하면 서버의 develop 브랜치에 원격 저장소의 develop 변경내역이 자동으로 merge되나요? 아니면 여기서는 develop 브랜치는 fetch 까지만 되고 이 변경사항이 merge 되는건 현재 작업중인 새 브랜치가 된다는 뜻인가요?

    (그리고 git pull origin develop:develop 이런 명령어를 내리면 어떻게 되나요? 이건 잘못된 건가요?)
  • ? profile
    develop 브랜치를 건드린 적이 없다면 pull 명령을 내려도 merge가 아니라 fast-forward로 처리됩니다. 이게 일반적인 merge보다 훨씬 빠르고 안전하기 때문에 공식 저장소와 함께 쓰는 브랜치는 건드리지 말라고 말씀드리는 거고요...

    fetch 용도로는 develop:develop 이런 문법을 종종 쓰지만 pull에서는 써본 기억이 없네요. 매뉴얼을 봐도 pull은 "현재 브랜치" 대상이라고만 되어 있는 것을 보니 다른 브랜치로 pull하는 것은 지원하지 않는지도 모르겠습니다.
  • profile ?
    https://git-scm.com/book/ko/v1/

    지금 여기 보고 있는 중인데, 이제 좀 뭔지 알 것 같네요

    근데 저기 예제랑 미묘하게 달라서 궁금한 점이 있는데, 지금 이 경우에 git fetch origin 이라고만 하면 어떻게 되는 건가요? 혹은 뒤에 데스티네이션을 지정하지 않고 git fetch origin develop 라고 한다거나...

    (제가 가져온 브랜치가 develop밖에 없으면 뒤에 develop를 생략해도 develop 브랜치를 가져오는게 맞나요?)
  • ?

    Screenshot_20160919-170229.png

     

    좀 궁금해서 몇 가지 명령어를 직접 쳐봤는데요

     

    일단 git pull origin develop:develop 이건 되는 걸로 보이는데... 맞나요?

     

    그냥 git pull origin develop 라고만 하면 

    From https://github.com/rhymix/rhymix
     * branch            develop    -> FETCH_HEAD

    라고 뜨는걸 봐서 현재 브랜치에 병합을 시도하는걸로 보이는데 develop:develop는 그런 문구가 없어서...

     

    그리고 이상하게 git fetch origin develop:develop는 아무런 반응이 없네요

  • ?
    이 fetch_head라는 것도 헷갈리네요

    https://backlogtool.com/git-guide/kr/stepup/stepup3_2.html

    여기 보고 있는 중인데

    위에서 git fetch origin develop로 가져온 fetch_head를 현재 브랜치에 바로 merge 하는 방법은 알겠는데

    이걸 일단 develop 브랜치에 merge 한다음 develop 브랜치를 현재 브랜치에 merge 하려면 어떻게 해야 하나요?

    설마 develop 브랜치로 checkout 한다음에 merge 실행하고 다시 현 브랜치로 돌아온 다음 merge develop 해야 하는건지...

    위에서 git pull origin develop:develop 했을때는 fetch_head 문구가 없이 곧바로 already up-to-date 문구만 나오는걸 보면 바로 develop 브랜치에 fast-forward로 merge 시도하는거 같은데요.
  • ? profile

    git fetch (또는 pull) origin develop:develop 명령에서 특별히 오류가 나지 않는다면 develop 브랜치에서 fast-forward에 성공한 거겠죠. 이 때 현재 브랜치가 기븐님 브랜치라면 별도로 checkout할 필요 없이 git merge develop만 하면 develop을 기븐님 브랜치에 merge합니다. (checkout하면 실제 소스가 변경되기 때문에 운영중인 사이트에서는 피하는 것이 좋습니다. 한꺼번에 pull하지 않고 fetch+merge하는 것도 같은 이유고요.)

  • profile ?
    근데 위 스샷 보면 git fetch origin도 아무 문구 없이 넘어가는데 그럼 이것도 되는 건가요? pull의 경우에는 가져온 브랜치가 기본 브랜치가 아니라서 브랜치 지정하라는 오류문구가 뜨는데...
  • ? profile
    브랜치명이 없으면 origin에서 업데이트 내역을 다운로드하여 .git 폴더 내에 저장하기만 하고 실제 브랜치에 fast-forward 적용하지는 않는 것으로 알고 있습니다.
  • profile ?
    그렇군요. 그렇다면 fast-forward의 경우엔 git fetch origin develop:develop랑 git pull origin develop:develop(이게 제대로 되는거라면) 이 두개의 결과가 같다고 봐도 되려나요?

    그리고 그냥 git pull이라고 했을때 결과가 git pull origin develop랑 같고, 이건 git fetch origin develop -> git merge fetch_head 이 두 가지 명령이 이루어진것과 같은 걸로 보이는데,

    그냥 git fetch 라고 하면 역시 아무 문구가 없이 줄이 넘어가더군요. 이렇게 하면 어떻게 된건가요? 이건 git fetch origin 과 같은 건가요?
  • ? profile
    origin이 기본값이므로 같은 것으로 보입니다. 설정하기에 따라 달라질 수도 있지만...

    https://git-scm.com/docs/git-fetch에서 <refspec>에 대한 부분과 CONFIGURED REMOTE-TRACKING BRANCHES 부분을 참고하세요.