[Git] nullSha1:contains entries pointing to null sha1

사용 중인 원격리파지토리를 바꾸기 위해, 기존에 사용 중인 원격리파지토리에서 클론을 받은 후 이사갈 원격 리파지토리에 Push 하려는데, null sha1을 가리키고 있다는 에러를 만났습니다. $ git push origin2 --all Enumerating objects: 3141, done. Counting objects: 100%(3141/3141), done. Delta compression using up to 12 threads Compressing objects: 100% (1207/1207), done. remote: error: object 65465...54654654:nullSha1: contains entries pointing to null sha1 remote: fatal: fs..

Git version 2.28이 발표되었습니다.

오늘 발표된 Git 2.28 버전에서 기능 상으로 크게 달라진 점은 없지만, 지난번에 썼던 글 중 2020/07/22 - https://github.com/github/renaming 과 관련된 기능이 추가되었습니다. 바로 기본 브랜치 이름을 master에서 변경할 수 있는 기능입니다. init.defaultBranch 라는 설정이며 이 값에 정해진 이름대로 브랜치를 생성하게 됩니다. 그럼 먼저 2.28버전으로 업그레이드를 합니다. 그리고 2.28버전으로 업그레이드 된 것을 확인합니다. ( wsl에 설치된 Git은 별도로 업그레이드 해주어야 합니다. ) 아무런 설정을 하지 않고, 리파지토리를 생성하면 예전처럼 master 브랜치가 생성됩니다. 하지만, 새로 추가된 설정에 main이라는 값을 주고 리파지토..

sparse-checkout 실제로 사용가능할까?

어제 올린 글 ( 2020/07/17 - Git에서 디렉토리 일부분만 가져오려면 어떻게 해야되요? )에서 sparse-checkout으로 특정 폴더만 받아올 수 있다는 것을 알았습니다. 그렇다면 그렇게 일부만 받아온 폴더를 실제 활용이 가능할까 궁금했습니다. 다시 말해, "SVN에서 처럼 특정 폴더만 받아왔을 때처럼, 이력관리를 할 수 있을까?" 가 궁금했습니다. 만약 가능하다고 하면, Git에서도 SVN처럼 하나의 리파지토리를 만들어두고, 업무별로 폴더를 나누어 사용할 수도 있을 테니, 수십개의 리파지토리를 사용하지 않아도 될것 같습니다. 가정 일단 제 생각은, "Git의 이력을 저장하는 방식은 스냅샷이나, SVN의 증분을 저장하는 방식 처럼 그렇게 하지 못할 것이다" 입니다만, 해보지 않으면 알 수가..

Git에서 디렉토리 일부분만 가져오려면 어떻게 해야되요?

SVN을 쓰시던 분들이 Git을 처음 접할때, 종종 하시는 질문이 있습니다. "디렉토리(=폴더) 중 일부만 가져오려면 어떻게 해야되요?" 이런 질문을 받게 되면 "Git에서는 안되요."라고 답변을 해왔습니다. 이 대답이 그때는 맞았고, 이제는 틀렸습니다. (꽤 오래전부터)가능해졌습니다. 그래서 이제는 "최신버전을 쓰시면 할 수 있어요."라고 대답해야 겠습니다. sparse checkout이라는 기법인데, 버전에 따라서 할 수 있는 방법이 좀 다르네요. sparse chckeout(git 1.7.0~), sparse-checkout(git 2.25~) React 리파지토리의 디렉토리 중 scripts 폴더만 가져오는 것을 예제로 각각 어떻게 하는지 알아보겠습니다. ( 아래 예제는 windows10 wsl ..

Docker Image 빌드할때 ssh로 Git clone하기.

도커 이미지를 만들 때, 호스트에 있는 파일을 복사하는 게 가장 일반적이겠지만, CI툴에서 이미지 빌드를 한다거나, 특정한 브랜치를 항상 빌드한다거나 하는 특정한 경우에 Docker Image를 만드는 중에 소스코드를 클론 하는 경우가 있습니다. 이럴 때는 Dockerfile에 아이디와 패스워드를 노출할 수는 없기에, 제가 사용한 방식은 리파지토리에 등록된 Deploy Key를 이용하여 클론 한 후에 이미지에서 제거하는 방법을 사용했습니다. Dockerfile 코드는 다음과 같은 형식입니다. FROM ubuntu:latest COPY ssh_key /home/bitlog/.ssh/id_rsa RUN git clone git@github.com:bitlog/dev-repository.git RUN rm /..