힘내 로그 별칭-치명적 : 모호한 인수 ‘% ad’: 알 수없는 개정 또는 경로 %ad | %s%d [%an]\” –graph

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

이 모든 것은 인용이 어떻게 든 없어지고 %adgit log의 매개 변수로 해석 된다는 것을 보여줍니다 . 실행시 형식 문자열이 올바르게 인용되도록 인용 및 이스케이프의 올바른 조합을 찾아야합니다.

별칭 및 인용에 관한 git config 매뉴얼 :

인수는 공백으로 나뉘며 일반적인 쉘 인용 및 이스케이프가 지원됩니다. 인용 부호와 백 슬래시를 사용하여 인용 할 수 있습니다.

이 줄에서 나는 인용과 탈출이 어떻게 작동하는지 알 수 없었습니다. 별칭에서 따옴표와 이스케이프 조합을 시도했지만 그 의미를 이해할 수 없었습니다.

귀하의 질문에 게시 한 다음 줄은 내 시스템에서 잘 작동합니다.

[alias]
    hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short

PuTTY를 사용하는 동안 시스템에서 올바른 조합을 얻으려면 실험을해야합니다.