2016-11-02 2 views
0

argc/argv 데이터를 구문 분석하기 위해 자체 라이브러리에서 작업 중입니다. 나는 자식에 대해 생각하고 있었다. git 인수는 어떻게 작동합니까?git 인수는 어떻게 파싱됩니까?

예 :

자식이 여기

commit이는 하이픈을 가지고 있지 않기 때문에 옵션을 선택하지 않습니다 -m "메시지"를 커밋합니다. 이 유형의 명령 줄 옵션 동작이 설명 된 곳이 있습니까?

내 라이브러리가 TCLAP 또는 CLAP보다 나빠질 수 있지만 외부 라이브러리를 사용할 수 없다는 것을 알고 있습니다.

편집 : 흥미로운 링크 - 만약 당신이 그래서 사용자의 관점에서 등 git status, git add을 할 수 있도록>https://softwareengineering.stackexchange.com/questions/70357/command-line-options-style-posix-or-what

+0

'argparse'는 명령 행 인자를 파싱하기위한 파이썬의 표준 라이브러리로,이 유형의 인자 인 a 부속 명령을 호출합니다. – chepner

답변

1

힘내, 다른 명령이 보인다, git commit 명령 git의 호출 것 같다 commit이 첫 번째 인수입니다. argc/argv을 수행 할 때 인수가 대시 또는 다른 형식으로 시작해야한다는 규칙은 없습니다.

Git의 흥미로운 점은 확장 성도 있다는 것입니다. 경로 어딘가에 git-hello이라는 스크립트 (대시와 함께 한 단어를 기록)를 작성하면 명령 행에서 git hello을 호출하여 "진짜"Git 명령과 구별 할 수 있습니다.

위의 내용에서 실제로는 git-commit, git-status이라는 별개의 프로그램이 있다고 추측 할 수 있습니다. 올바른 추측이 될 수 있습니다. man git-commit과 같은 작업을 수행 할 수 있으므로 man 페이지를 탐색 할 때 주목할만한 기능입니다. 힘내는 실제로 그러한 스크립트가있는 실행 경로를 가지고 있으며 git --exec-path을 실행하여 찾을 수 있습니다. 내 시스템에는 /usr/lib/git-core이고 별도의 스크립트와 Git에 대한 symlink가있다.

그래서 Git은 인수 처리와 관련하여 실제로 대부분의 프로그램과 상당히 다릅니다. 다른 표준 유틸리티가 소스에서 명령 행 인수를 처리하는 방법을 볼 수 있습니다. 예를 들어, this is the source for cat은 GNU 구현입니다. main으로 이동하면 인수 처리가 getopt_long 함수를 통해 이루어지며 이는 getoptdescribed in GNU docs과 함께 glibc의 일부입니다.

+0

그래,하지만 자식의 "스타일의 명령 행 옵션"에 이름이 있습니까? "-longname"스타일이 unix/GNU : https://www.gnu.org/software/libc/manual/html_node/Argument-Syntax.html이 아니며 POSIX가 아닌 http : //pubs.opengroup이기 때문입니다. org/onlinepubs/9699919799/basedefs/V1_chap12.html X 스타일처럼 보입니다 : http://www.tldp.org/HOWTO/XWindow-User-HOWTO/cli.html ... git에서 자체 "getopt "? – Oscar

+0

힘내 스타일에 이름이 있는지 확실치 않습니다. 그들은 스타일을 혼합합니다. 'git add -a'는 POSIX이고,'git commit --amend'는 GNU 스타일입니다. 힘내는 내가 기억할 수있는 한'-longoption' 형식을 사용하지 않는다. Git이 어떻게 동작하는지 볼 수 있습니다 : https://github.com/git/git/blob/master/git.c. 'main'과'handle_alias'는 관련이 있습니다. – DUman

+0

나는이 스타일을 지원하지 않을 것이라고 생각한다. ^^ 그리고 v2 사용자는 자신의 포맷을 만들 수있다. :) – Oscar

관련 문제