2024. 5. 3. 23:22

 /.git 폴더가 웹폴더 안에 있었는데... 이게 /.git URL로 접근이 가능하다.

 

그러면, config 파일안에 세팅해놓은 소스 주소나, 비밀번호까지 알 수있다.

 

ㅠㅠ

 

일단 웹서버에서 아파치 폴더로 이동.

 

버전별로 

/etc/httpd/conf

/etc/apache2/conf-enabled

등등이니, 폴더 들어가서 

 

httpd.conf

또는 seccurity.conf 폴더로 들어가서 

아래와 같이 추가하면 된다고 하나... 

<DirectoryMatch "/\.git">
	Require all denied
</DirectoryMatch>

 

이거는 403 Forbidden 이고, 

 

이거보다는 404 Not Found로 처리하는것을 선호한다. 

 

그래서 아래와 같이 쓴다고 하나 (svn, git 등등 다 같이...제한)

RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)

 

난 이거보다는 

VirtualHost를 사용중이라 VirtualHost안에 아래와 같이 추가해주었다.

 

<VirtualHost *:80>
	RewriteRule ^.*\.git.* - [R=404]
</VirtualHost>

 

RewriteRule ^.*\.git.* - [R=404] 이거 한줄만 복사(yy) 해서 host별로 붙여넣기(p) 해주면 편하다.

 

 

 

 

참고 사이트

https://stackoverflow.com/questions/6142437/make-git-directory-web-inaccessible

https://www.lesstif.com/software-architect/apache-httpd-svn-git-23756896.html

https://tom-dlog.tistory.com/entry/LinuxApache2-git-%EB%94%94%EB%A0%89%ED%86%A0%EB%A6%AC-%EC%A0%91%EA%B7%BC-%EC%B0%A8%EB%8B%A8%ED%95%98%EA%B8%B0

 

Posted by Tyson
2018. 7. 2. 16:13

git 원격저장소 추가.

 

git init 을 하여, 폴더를 초기화 시키고,

 

git add . 

파일추가

 

git remote add origin <url> 

 

이렇게 처음에 원격저장소를 추가하는데, 

 

git remote add origin http://user@192.168.0.52:9000/www/html



이렇게 했더니, pull 할때마다 암호를 물어본다.

 

귀찮으면, 처음부터 암호를 저장했어야 했다.

 

git remote add origin http://user:password@192.168.0.52:9000/www/html

 

 

[유저명:암호]

 

이렇게 했어야 했는데....

 

또는 git clone 해서 했는데, 암호를 처음에 안적었더니...

 

pull 할때마다, 암호를 적어줘야한다.

 

그래서 암호를 저장해서 다시 설정해야한다.

 

[root@localhost]# git remote -v

origin  http://user@192.168.0.52:9000/www/html (fetch)

origin  http://user@192.168.0.52:9000/www/html (push)

 

 

git remote -v 하면, 위처럼, origin에 저장된 주소가 나온다.

 

http:// 뒤에 user 가 내 아이디이다.

 

뒤에 ,user:password 이렇게썼으면, 암호가 저장되었을거다.

 

[유저명:암호]@주소 이렇게 써주면 된다.

 

그래서 origin (remote의 정보를 바꿔줘야한다.)

 

밑에처럼 치면 된다.

 

git remote set-url origin http://user:password@192.168.0.52:9000/www/html

 

 

git remote set-url origin [유저id:암호@주소] 

 

이런식으로 서주면 바뀐다.

 

git remote -v 로 확인해 본다.

 

 

 

Posted by Tyson
2018. 5. 3. 18:56

서버에 올려보고 속도 체크 해본데서, 커밋한거 올렸었는데, 


속도가 안나와서, 커밋한거를 되돌릴 상황이 발생해 버렸다.


근데, git 저장소를 따로 쓰는 우리에서는 저장소에 접속할순없고....


내 로컬에서 되돌리기를 해서 다시 푸시를 해줘야하는 상황인거다.


그래서 소스트리에서 그냥 "현재브런치를 이 커밋으로 초기화"를 했는데...


원격저장소에는 마지막 커밋이 남아 있어서, 푸쉬가 안된다. 


소스트리가..... 한글이라....'커밋바꾸기'가 맞는지...'재배치'가 맞는지 


몰라서......


그냥 터미널을 열어서 명령어를 쳤다.


터미널 위치는 밑에 사진에 보면 있다.






git revert HEAD  


위 명령어를 치면 메시지 에디터로 들어간다.


그때, 커밋 내용을 쓴다음에 esc키를 누르고 :wq 를 누르면, 메시지 작성에서 나오면서 되돌아같다.


그리고 위 사진처럼 Revert "커밋 메시지" 가 써지고 새로운 커밋이 생성된다.


revert HEAD 명령어는


HEAD에서 변경한 내역을 취소하는 새로운 커밋을 발행함.


(이것은 커밋을 이미 push한 경우에 사용하면 된다.)


커밋 내용을 보면 이전 커밋에 +됬던 내용들이 다시 -로 바뀌어 있다.



여러 커밋을 할때는


git revert [커밋번호] [커밋번호] [커밋번호] 


이렇게 하면 된다.


커밋번호는 다 쓸필요 없이, 앞에 7자리까지만 해도 된다.




위에 방법은 bash에서 하는법이고, 소스트리에서 하고 싶은데....


revert가 한국어로 어떻게 번역한지 모르겠더라....






밑에가 메뉴 영문이다.




reset 은 있는데, Revert가 없다.


Revert가 "Reverse commit...." 이다.


한국말로 커밋 바꾸기 하면 된다.


여기서 알아야 할것은, 


Revert할때, 여러 커밋 되돌릴때는 최신거 부터 순서대로 다 하는게 낫다.


중간에 빼 먹고 하면.... 나중에 merge할때, 충돌날 확률이 크다.


그리고, 


"Merge branch 'master' into  dev "


위와 같은 정보 커밋은 revert 할수 없다.


되돌리기 커밋은 내가 한 커밋만 가능하다.



==================================================================


※ reset과 revert의 차이점

reset은 선택한 버전을 reset할 경우 선택한 버전의 이후 버전을 모두 삭제하고 선택한 버전의 상태로 되돌아간다.

revert는 선택한 버전을 revert할 경우 선택한 버전의 바로 전 버전으로 돌아가는 새로운 commit을 자동으로 실행한다.


※ 여러 버전을 건너뛰어 Revert하게 되면 충돌이 발생한다. 예를 들어, 위 예제에서 "Circle클래스 추가" 버전으로 돌아가고 싶을 경우 최근 버전인 "Circle클래스 수정" 버전부터 차례로 revert하여야 한다.



출처: http://gangju.tistory.com/21 [gangju 개인 블로그]



===========================================================

밑의 내용은 아래 블로그에서 퍼온거다.

http://blog.daum.net/to302/10



git reset HEAD^

git push origin -f


git reset HEAD@{1}

git push origin +master


git reset HEAD^    // 최종 커밋을 취소. 워킹트리는 보존됨. (커밋은 했으나 push하지 않은 경우 유용)

git reset HEAD~2     //마지막 2개의 커밋을 취소. 워킹트리는 보존됨.

git reset --hard HEAD~2    // 마지막 2개의 커밋을 취소. index 및 워킹트리 모두 원복됨.

git reset --hard ORIG_HEAD    // 머지한 것을 이미 커밋했을 때,  그 커밋을 취소. (잘못된 머지를 이미 커밋한 경우 유용)

git revert HEAD    // HEAD에서 변경한 내역을 취소하는 새로운 커밋 발행(undo commit). (커밋을 이미 push 해버린 경우 유용)



Posted by Tyson
2018. 4. 27. 14:59


작은 회사들은 사실 Git를 잘 안쓴다.


그냥 바로바로 적용하는게 빠르고 쉬우니까...


깃의 장점에 대한 설명은 여러 사이트에서 설명해주니까, 생략하고,


실제 우리회사에서 깃을 처음쓰고 다들 헷갈려했던 부분들이다.


브랜치 사용법을 어느정도 하고 사용하면, 쉬운데......


그냥 Master브랜치에다가 다 커밋해버린다...


그러면, SVN과 틀린게 없는데...


그래서 브랜치에 대한 설명을 해주고, 적용하는데 많은 시간이 걸린다.


익숙치 않기 때문이다.


그래서 예를 들어 설명하겠다.


현재 운영중인 서버가 있고,


개발용으로 dev서버가 있다.


각자 로컬에서 작업하고 최종을 master에 올려서 dev서버에서 master를 불러와서 그냥 적용해보고, 사용하다가


특별한 에러가 없으면, 실서버에도 master를 불러와서 돌렸다.


근데, 문제가...아직 dev에서 테스트 중에, 급하게 수정 요청이 들어온게 있다.


큰거는 아니고, 오타자 정도 수정인 간단한건데......


실서버에서 master를 불러오면, 아직 테스트가 안된 코드까지 올라가게 된다.


그래서 브랜치를 나눠서 하라는거다.....


예로 api 수정이 있어서....


있어서 수정해야 되면, 먼저 master 최신으로 pull한다음에....브랜치를 나눠서 작업하고,


master_dev라는 브랜치를 만들어서, 그곳에 merge해준다.


그리고 dev서버는 master 브랜치가 아닌 master_dev브랜치로 checkout 해놓는다.


로컬에서 안나오는 서버에서는 dev브랜치에서 충분히 테스트 해보고, 적용시켜도 된다라고 판단이 되면,


그때 마스터에 머지를 하는거다.


실서버적용후에는 master_dev에서 master를 한번 더 머지해줘서, dev에 적용못한 급하게 master에서 수정한 것들을 


합쳐주면 된다.


그러면 Master랑, master_dev랑 같은 히스토리를 가지고 가는거다.


이걸 아무리 말로 설명해줘도 이해하기가 힘들거다.






소규모 그룹이다 보니, 다들 그냥 master에다가 다 때려 넣다보니까.... 운영중에, 아직 반영하기 그런것들이랑 섞이다 보니까.... 


진짜.....class파일 뒤져서, 완전 노가다로 급하게 수정해준적도 있다.


그러니까...우리 브랜치를 나눠서 잘 사용하는 법을 배우자고요.



Posted by Tyson
2018. 3. 8. 17:43

Git저장소에서 배포 서버에 올리려는데,  소스를 가져와야한다.


여기서 두가지 방법이 있다.


1. 폴더 생성 -> git init (깃 초기화) -> git remote add origin 서버주소(리모트세팅) -> git pull origin(파일 불러옴)


2. git clone 서버주소(자동 리모트 세팅 후 파일 복사)


1번방법이 기본인데, 2번이 편하므로 2번을 사용하겠다.


난 요나를 사용중인데, 


거기서 주소를 복사해서 가져왔다.


http://admin@192.168.0.52:9000/admin/test_project 



> git clone http://admin@192.168.0.52:9000/admin/test_project test_project

                       아이디@아이피주소:포트/생성자/프로젝트이름  생성프로젝트폴더명


근데, 이렇게만 하면 git pull 할때마다, 암호를 입력하라고 한다.


그래서 방법음 아이디:암호 이렇게 하면, git에 암호까지 저장되서, 다음부터는 암호를 안쳐도 그냥 가져온다.


> git clone http://admin:password@192.168.0.52:9000/admin/test_project test_project

                       아이디 : 암호    @아이피주소:포트/생성자/프로젝트이름  생성프로젝트폴더명


이런식으로 하면 된다.

Posted by Tyson
2018. 3. 8. 16:13

깃 설정하고, 처음으로 pull해서 가져오려는데, 안되서, 보니,


Gtk-WARNING 에러가 계속 뜨는거다.



(gnome-ssh-askpass:5707): Gtk-WARNING **: cannot open display: 




gtk의 ssh-askpass를 사용해서, ssh인등을 하게 되어있다는군,



그래서, 




unset SSH_ASKPASS

 

해주면 된다.


참고 원본

https://www.lesstif.com/pages/viewpage.action?pageId=22643955




Posted by Tyson
2018. 2. 28. 18:42

아래글은, 제가 처음에 git을 브랜치 나누는거는 이해가 되는데,


여러명에서 같이 작업할때는 어떻게 해주는지 개념 이해가 안되서,


오랫동안 고민하고, 여려명과 협업 하면서 터득한겁니다.


자신이 git사이트나 여러 설명문서들을 봐도, 이해가 잘 안될때, 여려명이서 관리하는 법이 이해가 안될때,


읽어주세요~!


이건 진짜, 처음 하시는 분들에게 도움이 되고자 한거니까,


좀 쓰시는 분들이 보기에는 너무 쉽게 생각하실 수 있는데, 편하게 봐주세요~!!



----------------------------------------------------------------------------------------


혼자서, git을 쓸때는 그냥 혼자 히스토리 관리용으로 썼는데,


여러명이 쓸때는 개념이 이해가 잘 안되었다.


먼저, 1개의 브랜치(Master)에서만 작업하는 개념으로 설명해 주겠다.


브랜치, 머지는 뒤에 설명하겠다.



제일 중요한거는 마지막사람이 파일을 정리하는거다!



자! 간단하게, git은 마지막에 커밋하고, 푸쉬하는 사람이 최신정보이다.


merge작업은 마지막에 커밋하는 사람이 하면 되는거다!!


이게 제일 중요한 개념임!!



SVN같은 형상관리를 쓰다가, GIt으로 오면 처음에 이해가 안되는게,


다른거는 내가 checkout하면, 다른 사용자가, 파일을 못 건드리게 했는데,


git은 그런게 없다.


그러면 파일이 충돌이 났을때 어떻게 해야하나????


누가 수정한 파일이 최고 권한인가 하는거다..



3명의 작업자가 있다.


A, B, C, D라고 하겠다.


파일 1.txt, 2.txt파일 2개가 있다.


밑에 사진은 급하게 ppt에서 그린건데,


대충 저런식으로 흘러간다.


밑에 설명을 보시길




처음에 다들 클론해서 가져간다.


A 가 1을 수정했다.


그리고 스테이지에 올려서, 커밋까지 했다.


그러면 A 저장소에는 수정했고, 커밋할때의 히스토리를 가지고 있다.


여기서, A가 push를 하면, 서버에 있는 저장소(주저장소)에는 A가 수정한 정보가 최신정보가되었다.



여기서 B가 pull로 댕기면, B가 커밋한 정보가 없으니까, 바로 당겨진다.


C는 2.txt라는 파일만 수정을 하고 커밋을 했지만, pull 하지 않고, push하니까, 에러가 뜬다.


여기서의 에러는, 내가 가지고 있는 정보가, 최신이 아니라는거다.



벌써 서버에는 A가 가지고 있는 정보가, 최신이다.


그래서 최신으로 업데이트 하고, 푸쉬하라고 한다.


이 경우는 pull하고, 최신 히스토리로 업데이트 하고, 다시 push하면, 


A가 커밋한게 최신 업데이트가 된다.




자, 여기에서 D 는 1.txt를 수정하고, push를 했는데, 에러를 토해낸다.


A가 수정을 하고, 커밋, push를 했기 때문에, 내 정보는 최신이 아니고, 파일이 중복으로 커밋됬기 때문이다.


이때는 fetch, pull를 하면, 



>>HEAD

틀린 파일내용

<<



이런식으로 틀린거 알려주고, 파일이 합쳐진다.


fetch를 하면, 내가 가지고 있는 history가 최신이 되기 때문에, 


수정하고, 저장한다음에 커밋하고, push를 하면 에러 없이 된다. 내가 최신의 사람이기 때문에, 다 받아들인다.


그래서, 최신 정보의 사람이 왕이 되는거다.



그래서 먼저, 서로 다른부분확인하고, 내가 다른사람꺼랑 내용을 보고, 수정을 한다.


그리고 커밋,push를 한다.


그러면, 내가 마지막으로 수정했기 때문에, 내꺼가 최신히스토리기때문에, 커밋 푸쉬가 된다.




결국, 마지막에 하는 사람이 갑인거다.


마지막에 하는사람이 다른사람꺼 다 날리고, 자기꺼로 복사, 붙이기 해버리면, 그냥 x되는거다.


git 쓰다가 에러 뜨면, reset해버리고, 그냥 자기커밋한거 되돌리기 하고,


pull로 댕긴다음에, 자기가 수정한거 복사해 놓았다가, 그냥 다시 덮어 쓰는 사람이 있는데,


이러면 즞되는거다.



그럴거면, 파일 못 건들게 하는 SVN쓰지, 왜 git를 쓰나 싶다.....




============================================================================

자, 위에까지가, 여려명이서 작업할때, 기본개념이다.



그 다음에 많이 듣는 브랜치, Merge는 멀까?



브랜치는 나무에서 가지치기 하는거다.


예로, 내가 로그인 부분만 수정해야된다.


근데, 다른데는 건들었다가, 에러가 뜰거 같다.


그러면, loginfix 브랜치를 하나 만든다.


그러면 만든 시점에서, 가지치기가 되는거다.


그리고, 그 브랜치에서 작업을 내 마음대로 한다. 파일을 지우던, 여러파일을 수정하던 상관없다.


그리고, 커밋하고, Master로 가서, loginfix를 Master브랜치에 merge시켜준다.


그러면, 새로운 머지한 정보가 새로 커밋이 생긴다고 생각하면 된다.


그리고 그전에 수정했던것과, Master와 합쳐지는거지, 다른 부분들이 있으면, fetch해줘서, 수정하고 합치고 해서


마지막 사람이 다시 커밋, 푸쉬 해주면 된다!










Posted by Tyson
2015. 12. 22. 18:38

Git 이란 넘을 이제야 이해해서 글을 씁니다.


회사내 테스트 서버에 깃은 설치했습니다. 


설치법은 설명이 많으니까~ 생략. 


근데, Git 사이트 가서 있는 윈도우용 프로그램을 설치하기는 했는데.... 


이넘을 리눅스서버랑 어떻게 연결을 하고 자료를 가져와야할지.....처음에 완전 개념이 안잡혔거든요.


그러면 리눅스 서버에 계정을 일일히 만들어서 해야하나?? 하는 생각도 하고 어찌할지 고민고민하다가.


이제야 이해했습니다.


윈도우에 Git를 설치하고 나면, 폴더에서 오른쪽 클릭했을때, Git GUI, Git Bash 등등이 생기죠.


먼저 서버에서 이 폴더는 깃을 써서 관리하겠다라고 해줘야합니다.

home/www 이란 폴더라고 가정하겠습니다.

위 폴더로 간 다음에 

#git init

원하는 폴더에 git init을 해주면 설정됬다고 뜰껍니다. 

그리고 

#ll -al 

하고 보면 .git 이라는 폴더가 생겼습니다.

그다음에 파일들을 등록을 해줘야 합니다.

#git add .

#git commit -m "코멘트"

이렇게 하면 폴더에 있던 파일들이 다 등록이 됩니다.

이제부터는 깃에서 파일들을 다 관리하는거죠.



이제 다시 내 컴퓨터 윈도우로 가서 작업할 폴더 하나 만듭니다.

그리고 마우스 오른쪽 버튼을 눌러서 git Bash 을 실행하면 터미널 같은게 열릴겁니다.

이제 서버에 있는 자료를 여기로 가져오겠습니다.


#git clone ssh://root@192.168.0.0:22/home/www/.git

                  서버아이디@ 서버주소:22/디렉토리 주소

이런식입니다.

인터넷에 GitHub에서 하는법은 많은데, 회사내 서버에서 직접 쓰고 싶은데, 설정법을 몰라서 해맸습니다.

ssh 붇이는거랑 서버주소. 그리고, 22 (이건 생략가능합니다.)

그리고 마지막에 아까 확인했던 .git 폴더를 꼭 써줘야 합니다.

그러면 패스워드 넣으라고 하고 넣으면 파일을 다 복사해서 가져옵니다.


그러면 이제 내 컴퓨터 로컬에서 작업하시고 다시 올릴실때입니다.


#git remote add origin ssh://root@192.168.0.0:22/home/www/.git

이렇게 써서 원격저장소 등록을 해 놓으라고 하는데,

클론 써서 가져온것은 자동으로 등록이 되어있어서,

그냥

#git push origin master

           보내고 싶은 브랜치 / 내보는 브랜치 입니다.

                         저장소


근데, 여기서 에러가 뜹니다. 

왜@@@@

저도 master 원격저장소도 master인데, 내용이 틀리기 때문입니다.

그래서 로컬에서 작업하실때는 다른 브랜치를 만드셔서 작업하시고 푸시 하시는 것이 좋아요~~

clone으로 받은 다음에 바로 

#git branch dev 

#git checkout dev

dev만들어서 dev로 이동해서 작업하거든요.

그래서 나중에 푸시할땐

#git origin dev

이런식으로 보내고,


서버에 접속해서 한명이 머지해주고 그러는 방법이죠~


Posted by Tyson