브랜치 삭제
·
Git
브랜치를 삭제하는 것은 해당 브랜치 내용과 커밋을 삭제하는 것이다. 따라서 삭제 명령을 실행할 때는 주의애햐 한다. 브랜치 삭제는 크게 스테이지 상태에 따라 달라진다. 일반적인 브랜치 삭제$ git branch -d 브랜치이름 아래와 같이 현재 자신의 브랜치에서 삭제 명령을 실행하면 오류 메세지가 출력된다. 어느 브랜치로 체크아웃 될 지 모르기 때문이다. 따라서, 삭제하고자 할 때는 다른 브랜치로 이동해서 삭제한다. d 옵션은 스테이지 상태가 깨끗할 때만 삭제를 허용한다. 워킹 디렉토리에 작업한 기록이 있거나 add 명령어로 스테이지의 인덱스가 변경된 상태라면 삭제하지 않는다. 삭제하려면 반드시 최종 상태가 커밋되어 깨끗한 스테이지 상태여야 한다. 또한 병합되지 않은 브랜치는 d 옵션으로 삭제 할 수 없..
브랜치 패치
·
Git
리모트 브랜치는 일반적인 커밋 패치와 동일하다. 리모트 브랜치를 패치한다고해서 자동으로 로컬 저장소에 새로운 브랜치가 생성되지는 않는다. 패치 동작은 원격 저장소에서 리모트 브랜치 내용을 내려받기만 할 뿐 자동으로 병합하지 않기 때문이다. 테스트를 위해 Github에 원격 브랜치를 생성한다. 다음으로, 로컬에서 원격 브랜치를 가져온다. 새로 만든 브랜치가 보이면 정상적으로 가져온 것이다. 이때, 새로운 원격 브랜치가 추가되거나 기존 원격 브랜치가 업데이트 되었다면 이 변경 사항은 .git 내부에 저장된다.  병합리모트 브랜치가 패치되면 깃은 원격 저장소의 최신 상태를 가져와서 로컬에 있는 리모트 브랜치 포인터를 생성하거나 업데이트 한다. 원격 저장소에서 패치된 커밋들을 새로운 로컬 브랜치로 반영하려면 병..
[Dreamhack] Super domper filter
·
워게임/웹해킹
보호되어 있는 글입니다.
Dom Clobbering
·
보안/웹
Dom Clobbering이란?Dom Clobbering은 웹 보안에서 DOM 객체와 HTML 요소의 속성이 충돌하여 예상치 못한 동작을 유발하는 취약점이다. HTML 문서 내에서 요소의 id나 name 속성을 사용하면, 자바스크립트에서 해당 요소가 전역 객체의 속성으로 자동으로 등록된다. 이를 악용하면 기존의 전역 변수나 함수가 덮어 씌워져 보안 문제가 발생할 수 있다. 공격 방법DOM Clobbering 성공 여부를 확인하는 PoC 코드이다.더보기 HTML 요소에 id 속성을 부여하면, 해당 요소는 전역 객체(window)의 속성으로 자동으로 등록되어 전역에서 접근할 수 있다. 하지만, HTML에서 id는 문서 내에서 유일해야 하며 만약 중복된 id가 존재하게 되면 동작을 예측할 수 없게 된다. 반면..
원격 브랜치
·
Git
리모트 브랜치저장소는 각자의 고유한 브랜치를 생성하고 관리하는데, 원격 저장소에 생성한 브랜치를 리모트 브랜치라고 한다.로컬 저장소에 생성한 브랜치는 서버로 공유할 수 있다. 원격 저장소와 연결된 로컬 저장소에서 새로운 브랜치를 생성한다고 해서 자동으로 원격 저장소에도 브랜치가 생성되는 것은 아니다. 또, 원격 저장소에 등록된 브랜치가 자동으로 로컬 저장소를 만들지도 않기 때문에 별도 명령을 실행하여 저장소를 동기화 해야 한다.원격 저장소와 로컬 저장소의 브랜치 이름은 보통 같지만, 반드시 일치하지 않아도 된다. 서로 다른 이름으로 브랜치를 연결하여 이를 통해 원격과 로컬에서 다른 브랜치로 운영하고 관리한다.리모트 브랜치는 보통 별칭/브랜치 이름 형태이다. 브랜치 추적리모트 브랜치 또한 원격 저장소의 브..
[Dreamhack] Curlove
·
워게임/웹해킹
보호되어 있는 글입니다.
[Dreamhack] read_flag
·
워게임/웹해킹
보호되어 있는 글입니다.
HEAD 포인터
·
Git
마지막 커밋깃은 마지막 커밋 정보를 기반으로 새로운 커밋을 생성한다. 시스템이 매번 커밋할 때마다 마지막 커밋 정보를 찾으면 부하가 발생하기 때문에 깃은 마지막 커밋을 쉽게 확인할 수 있도록 HEAD라는 특수한 포인터를 제공한다. HEAD는 작업 중인 브랜치의 마지막 커밋 ID를 가리키는 참조 포인터이다. 깃은 마지막 커밋을 가리키는 HEAD 포인터를 부모 커밋으로 대체하여 사용하기 때문에 빠르게 스냅샷을 생성할 수 있다.master 브랜치의 마지막 커밋은 e0b2fc4이고, footer 브랜치의 마지막 커밋은 c6e3f34이다. master 브랜치에서 새로운 커밋을 생성할 때 부모 커밋으로 e0b2fc4을 가리키는 HEAD 포인터를 사용한다. footer 브랜치에서 새로운 커밋을 생성할 때는 c6e3f..
브랜치
·
Git
브랜치 특징가상 폴더깃의 브랜치는 작업 폴더를 실제로 복사하지 않고, 가상 폴더로 생성한다. 외부적으로는 물리적인 파일 하나만 있는 것으로 보인다. 생성된 작업 폴더는 물리적으로 복제된 구조보다 유연하게 처리할 수 있다. 브랜치로 생성된 가상 폴더는 빠르게 공간 이동이 가능하다. 개발자는 쉽게 가상 폴더인 브랜치를 이동하면서 프로젝트를 수행할 수 있다. 독립적인 동작브랜치를 이용하면 원본 폴더와 분리하여 독립적으로 개발 작업을 수행할 수 있다. 기존에는 소스 코드의 작업 폴더를 별도로 생성했다. 물리적으로 복사된 각자의 폴더에서 코드를 작업한 후 소스 코드 2개를 다시 하나로 합쳐야 했다. 코드를 하나라 합치려면 작업 내역들을 일일이 찾아 정리해야 한다.하지만, 깃과 같은 버전 관리 시스템을 이용하면 분..
원격에서 수동으로 내려받기
·
Git
원격 저장소 내용을 내려받는 방법은 pull과 fetch가 있다. 두 방법의 차이는 병합을 자동 처리하는지 여부이다. 자동 병합pull은 원격 서버에서 현재 커밋보다 더 최신 커밋 정보가 있을 때 내려받는다.  내려받은 최신 커밋들은 현재 브랜치로 자동 병합처리 한다. 여기서 병합은 원격 서버 파일과 로컬 파일을 하나로 합치는 과정이다.하지만 여러 개발자와 협업으로 코드를 작성할 때 pull 명령어를 사용한 자동 병합은 문제가 생길 수 있다. pull 명령이 자동으로 브랜치를 병합하지 못하고 충돌이 발생하면 fetch 방식을 사용해야 한다. 가져오기fetch는 원격 저장소에서 코드를 수동으로 내려받는 작업을 한다. 원격 저장소에서 커밋된 코드를 임시 브랜치로 내려받은 후 현재 브랜치와 자동으로 병합하지 ..