하고 싶었던 것

github과 gitlab의 ssh key를 서로 다르게 가져가고 싶었습니다.
하지만 깃에서 사용하는 ssh key는 OS 레벨에서 관리되기 때문에? 간단하지 않았습니다.

% git config --list
credential.helper=osxkeychain

어.. 이렇게 쓰고 보니까 credential.helper를 잘 다룰 줄 알았더라면 좀 더 빨리 끝냈을 것 같네요 (u_u );;

~/.ssh/config 를 사용해봅니다

먼저 ssh key를 적당히 하나 만들고, ~/.ssh/config를 수정해봅니다

% cat ~/.ssh/config 
Host git-codecommit.*.amazonaws.com
User ****
IdentityFile ~/.ssh/id_rsa

# **** Account Identity
Host gitlab.com
  Hostname gitlab.com
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/id_rsa_**** # 적당히 하나 만든 ssh key

이렇게 하면 gitlab.com 에 대한 ssh 관련 접근에 적당히 하나 만든 키를 사용하게 됩니다.

즉 ssh로 연결해야 합니다.

% git config remote.origin.url 'https://gitlab.com/****/****.git'
% git fetch
remote: The project you were looking for could not be found or you don't have permission to view it.

이러면 안 되고,

% git config remote.origin.url 'git@gitlab.com:****/****.git'
% git fetch
fatal: bad object refs/heads/main 2
error: ****.gitlab.com:****/****.git이() 모든 필요한 오브젝트를 보내지 않았습니다 # did not send all necessary objects

어.. 왜 안 될까요;;
찾아보니 이건 다른 문제였습니다.

error: invalid sha1 pointer | error: bad ref for

% git fsck --full
오브젝트 디렉터리를 확인하는 중입니다: 100% (256/256), 완료.
오브젝트를 확인합니다: 100% (39445/39445), 완료.
error: refs/heads/main 2: invalid sha1 pointer 0000000000000000000000000000000000000000
error: bad ref for .git/logs/refs/heads/main 2

에러나는 파일인 .git/refs/heads/main 2, .git/logs/refs/heads/main 2 를 삭제하여 해결했습니다.

마치며

아 역시 git configcredential을 사용하는게 더 자연스러울 것 같아요!