2016-11-28 1 views
3

나는 golang을 처음 사용하고 있습니다. 나는 go get가 패키지 관리자 역할을하고 원격 버전에 다양한 버전 제어 시스템을 제공한다는 사실을 알게되었습니다.원격 Repos와 함께 사용할 버전 제어 시스템을 "알게"되려면 어떻게해야합니까?

따라서 패키지 가져 오기 경로가 주어지면 go get은 사용할 VCS를 어떻게 결정합니까? 나는 항상 아래에 쿼리 문자열을 참조하십시오 :

?go-get=1 

그래서 일부 프로토콜/규칙이 여기 있습니까?

답변

5

Go에 대한 좋은 점 중 하나는 모든 것이 잘 들어간다는 것입니다. Go :-) 거의 모든 표준 라이브러리와 도구를 포함합니다.

cmd/go/vcs.go에서 우리는 이것이 어떻게 행해지는지 알 수 있고, cmd/go/alldocs.go에서는 그것이 문서화되어있다.

특히, repoRootForImportPath보고 :

// repoRootForImportPath analyzes importPath to determine the 
// version control system, and code repository to use. 
func repoRootForImportPath(importPath string, security securityMode) (*repoRoot, error) { 

이것이 않는 것은 :

  1. vcsPaths는 "알려진 호스트"의 정적 목록을 보유하고 있습니다. 일부 (예 : GitHub)의 경우이 작업은 간단하며 VCS 만 설정할 수 있습니다. 다른 사람들 (예 : BitBucket)은 어떤 repo를 사용할 수 있는지 확인하기 위해 URL을 검사하는 콜백 함수가 사용됩니다.

  2. 경로가 실패하면 경로의 "VCS 확장자"(예 : example.com/foo.git 또는 example.com/foo.git/dir)를 찾습니다.

  3. 그리고 마지막으로 go get처럼 보이는 go-import 메타 태그를 찾습니다 :

    <meta name="go-import" content="example.com/path git https://github.com/Example/repo.git"> 
    

    는 또한 parseMetaGoImports()를 참조하십시오. Vanity Imports with Hugo은 이것을 사용하는 방법에 대한 좋은 소개입니다.

실제 "자동 감지"메커니즘이 없습니다. 그러므로 만약 Repo가 https://example.com/stuff에 있다면 go get example.com/stuff이 아니고이 될 것입니다. 확장자 또는 메타 태그가 필요합니다.

매개 변수가 추가되어 웹 사이트 작성자가 go get의 요청임을 쉽게 알 수 있으며, 경우에 따라 유용 할 수 있습니다.

+0

구현 위치를 지적 해 주셔서 감사합니다. 실제 예제로'https : // golang.org/x/net/html'의 HTML 페이지는'go-import' 메타 태그를 포함하고 있습니다. – smwikipedia

관련 문제