기본적으로, gitlab의 issue에서 merge request를 생성할 때, 브랜치 명은 다음 규칙을 따른다. {이슈번호}-{이슈명 축약} 이슈명의 경우, 한글로 작성할 경우 {이슈번호}- 로만 표기되는 경우도 잦고, 이슈만을 위한 branch를 찾기도 번거롭다. 따라서, branch명의 템플릿을 변경하는 방법에 대해 작성하고자 한다. Merge Request branch name template 변경 embedded/service/gitlab-rails/app/models/issue.rb 파일의 to_branch_name 함수 변경 변경전 def to_branch_name if self.confidential? "#{iid}-confidential-issue" else self.class.to_br..
일반적으로, pull 또는 fetch 명령어를 통해 가져온 Remote branch 정보는 Remote에서 삭제 되더라도 계속해서 리스트에서 제거되지 않는다. 따라서 이를 제거하기 위해 일반적으로는 git fetch --prune 명령어를 통해 삭제된 branch를 리스트에서 제거하는 작업을 수행한다. 하지만 이와 같은 동작은 Remote branch의 정보만 업데이트하며, checkout된 local branch 목록에서는 지워지지 않는다. 이를 해결하기 위해선 아래와 같은 명령어를 실행하면 손쉽게 해결할 수 있다. git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0
최근 Remote의 Branch를 제거하던 중 아직 개발중인 Branch를 삭제하는 일이 발생했다. 다행히 해당 Branch에 대해 Merge Request를 생성해서 관리하고 있었고, 이에 대한 Commit hash 기록이 남아있어 일부 복구가 가능했다. 하지만, 미처 기록이 남지 않은 커밋이 있었고, 이를 복구하기위해 여러가지 방안을 찾아보았고, 아래의 방법을 사용하면 쉽게 찾을 수 있었다. git reflog | awk '{ print $1 }' | xargs gitk 위의 명령어는 최근 60일 이내의 log를 다시 볼 수 있었고, 이를 통해 Commit 정보를 받아와 gitk를 이용해 최근 Commit Log를 Graph화 하여 볼 수 있었다. 앞으로는 삭제할 때 조금 더 신중히 해야겠다.
코드를 관리하면서, 여러 프로젝트에서 동일한 코드를 사용하게 되는 경우가 종종 발생한다. 이러한 상황이 발생하게 될 경우 보통은 코드의 복사/붙여넣기를 통해 코드를 관리하게 된다. 이러한 복사/붙여넣기 방식은 코드 관리에 어려움을 겪게 될 수 있는데, 어떤 프로젝트에는 반영된 부분이 다른 프로젝트에는 반영이 되거나 누락되는 경우가 흔히 발생하게 된다. 이러한 부분은 git을 사용할 경우 공통된 부분의 코드에 대해 sub module 기능을 이용하여 분리하게 될 경우 편리하게 개선 할 수 있다. sub module이란 파일을 직접 갖는게 아니라 다른 코드 저장소(repository)에 있는 코드를 링크만 하는 방식이다. 이러한 특성을 이용하여 공통된 부분을 폴더로 분리하고 별도의 저장소로 분리한 뒤 해당 ..
svn을 사용하다보면 github에서 zip download와 유사하게 코드의 수정 이력과 같은 정보 없이 데이터만을 export (download) 가져올 경우가 종종 존재한다. 이러한 동작을 위해 svn에서는 export 라는 기능을 제공하고 있으며, 필요시 특정 revision에 대한 코드만을 가져올 수도 있다. svn export에 대한 help 정보는 아래와 같다. export: 버전관리 정보 없는 깨끗한 사본을 받아옵니다. 사용법: 1. export [-r REV] URL[@PEGREV] [PATH] 2. export [-r REV] PATH1[@PEGREV] [PATH2] 1. 리비전 REV에 해당하는 URL 의 내용을 PATH에 받아 옵니다. 만약 REV가 지정되지 않으면 HEAD(최신 리..
SVN을 사용하다 보면, 원격 Repository에 파일을 업로드/삭제를 해야할 일이 있다. 1. 원격 Repository에 파일(directory) 업로드 svn import LOCAL_PATH REMOTE_PATH 주의할점으로, directory를 업로드할 때, LOCAL_PATH로 Directory를, REMOTE_PATH로 업로드할 위치(parent directory)를 입력하면 parent directory에 파일만 업로드 된다. local에 아래의 구조를 가진 a directory를 http://svn.url/A에 업로드 할 때 [폴더 구조] a a/b.txt a/c.txt svn import ./a http://svn.url/A 위와 같은 커맨드 명령어를 입력하게 될 것이며, 이에 대한 결과..