Git Immersion 의 로그 별칭 을 사용하려고합니다 .
[alias]
hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
그러나 Git은
fatal: ambiguous argument '%ad': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
v1.6.1 사용 내가 지금까지 한 것은 마스터에 두 개의 커밋과 브랜치에 대한 커밋입니다. 이 별명은 다른 곳에서 작동합니다.이 특정 기계의 문제는 무엇입니까?
편집- 아래의 lesmana 제안에 따라 PuTTY에 줄을 붙여 넣은 후 어떻게 따옴표의 백 슬래시가 제거되었는지 확인할 수있었습니다. "
대신 사용할 때 위의 오류가 발생 \"
합니다.
답변
오류 메시지의 출처는 다음과 같습니다.
$ git log %ad
fatal: ambiguous argument '%ad': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
다음 두 명령에서 동일한 오류 메시지가 나타납니다.
$ git log --pretty=format:%h %ad | %s%d [%an] --graph --date=short
$ git log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
문제는 즉 git log
다음 두 개의 인수를 수신 --pretty=format:%h
(또는 --pretty=format:\"%h
)와 %ad
. 적어도 bash에서 명령으로 직접 실행될 때 나머지는 명령에 대한 파이프 %s%d
이며 일반적으로 존재하지 않습니다. 내 시스템의 전체 오류 메시지는 다음과 같습니다.
$ git log --pretty=format:%h %ad | %s%d [%an] --graph --date=short
bash: %s%d: command not found
fatal: ambiguous argument '%ad': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions
이 모든 것은 인용이 어떻게 든 없어지고 %ad
git log의 매개 변수로 해석 된다는 것을 보여줍니다 . 실행시 형식 문자열이 올바르게 인용되도록 인용 및 이스케이프의 올바른 조합을 찾아야합니다.
별칭 및 인용에 관한 git config 매뉴얼 :
인수는 공백으로 나뉘며 일반적인 쉘 인용 및 이스케이프가 지원됩니다. 인용 부호와 백 슬래시를 사용하여 인용 할 수 있습니다.
이 줄에서 나는 인용과 탈출이 어떻게 작동하는지 알 수 없었습니다. 별칭에서 따옴표와 이스케이프 조합을 시도했지만 그 의미를 이해할 수 없었습니다.
귀하의 질문에 게시 한 다음 줄은 내 시스템에서 잘 작동합니다.
[alias]
hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
PuTTY를 사용하는 동안 시스템에서 올바른 조합을 얻으려면 실험을해야합니다.