답변:
원하는 명령 git ls-remote은 원격 저장소에 대한 정보를 얻을 수 있지만 기록을 표시하거나 디렉토리 또는 해당 수준의 목록을 표시 할 수 없습니다. 기본적으로 매우 높은 수준의 원격 개체 만 볼 수 있습니다 ( 예를 들어 현재 HEAD 및 태그).
원하는 작업을 수행하는 유일한 방법은 ssh를 사용하여 원격 명령을 실행하고 결과를 반환하는 것입니다. 예를 들면 다음과 같습니다.
ssh me@otherhost "cd repo && git log -n 10"
그들이 그것을 추가 할 수 있다면 당신이 원하는 것은 멋진 기능이 될 것이지만, 내가 읽은 것에서 히스토리를 얻는 것은 git에 대한 많은 정보가 필요하기 때문에 그리 쉽지 않습니다. 그 시점에서 git fetch를 수행했을 수도 있습니다. .
Git은 분산 버전 제어 시스템이고 Subversion은 중앙 집중식 (클라이언트-서버) 버전 제어 시스템입니다. 그들은 다르게 작동합니다. 그것에 익숙해 지십시오. StackOverflow에서 질문에 해당svn status -u 하는 git에 대한 그 차이의 결과를 설명하는 내 대답을 읽으십시오 .
약간 반복 : 중앙 집중식 버전 제어 시스템 (예 : CVS 또는 Subversion)에서는 거의 모든 명령이 서버 에서 처리되고 네트워크와 관련됩니다. 로컬에서 수행되는 명령은 거의 없습니다. "svn status"및 "svn diff"의 우수한 성능을 갖기 위해 Subversion은 클라이언트에 체크 아웃 된 버전의 '원본 복사본'을 저장하여 이러한 일반적인 작업에 대한 네트워크 전송을 포함 할 필요가 없습니다 (이는 Subversion checkout = 2 x 최소한 작업 디렉토리의 크기).
전체 저장소의 로컬 복사본 (복제)이있는 분산 버전 제어 시스템 (예 : Git, Mercurial 또는 Bazaar)에서는 거의 모든 명령이 client에서 수행됩니다 . 매우 적은 수의 명령에 다른 저장소 (서버)에 대한 네트워크 연결이 필요합니다.
서버에서 수행 할 수있는 명령 수는 제한되어 있습니다.
일부 전송 프로토콜에서이를 수행하는 방법에 대한 정보 는 http://git-scm.com/book/en/Git-Internals-Transfer-Protocols 를 참조 하십시오 . SSH를 통한 표준 git에서는 작동하지 않습니다.
SSH를 통한 git의 경우 최신 서버 측 git을 사용하면 원격에서 직접 git-archive를 수행 할 수 있습니다. 예를 들어 "tar t"로 파이프하여 주어진 커밋의 모든 파일 목록을 가져올 수 있습니다.
GitHub는 svn과 호환되므로 svn ls를 사용할 수 있습니다.
svn ls https://github.com/user/repository.git/branches/master/
BitBucket은 git 아카이브를 지원하므로 tar 아카이브를 다운로드하고 아카이브 된 파일을 나열 할 수 있습니다. 매우 효율적이지는 않지만 작동합니다.
git archive --remote=git@bitbucket.org:repository HEAD directory | tar -t
정확하지는 않지만 방법이 있습니다.
GitHub 개발자 API 사용
이것을 열면 최근 커밋을 얻을 수 있습니다.
https://api.github.com/repos/learningequality/ka-lite/commits
위의 URL 끝에 커밋 해시를 첨부하여 특정 커밋 세부 정보를 얻을 수 있습니다.
모든 파일 (메인 트리에 sha가 필요합니다)
이것이 도움이되기를 바랍니다.
이것은 아마도 일부 사람들에게는 더럽다고 생각할 수 있지만 github 저장소의 경우 매우 실용적인 해결책은 "git-ls"와 같은 스크립트를 만드는 것입니다.
#!/bin/sh
remote_url=${1:? "$0 requires URL as argument"}
curl -s $remote_url | grep js-directory-link | sed "s/.* title=\"\(.*\)\".*/\1/"
물론 실행 가능하고 접근 가능하게 만드십시오 chmod a+x git-ls; sudo cp git-ls /usr/local/bin. 이제 원하는대로 실행하면됩니다.
git-ls https://github.com/mrquincle/aim-bzr
git-ls https://github.com/mrquincle/aim-bzr/tree/master/aim_modules
또한 git instaweb로컬 파일에 대한 유틸리티 가 있음을 알고 있어야 합니다. 파일을 표시하고 이와 같은 서버를 보유하는 것은 git의 고유 한 탈 중앙화 특성을 파괴하지 않는다고 생각합니다.
curl -s https://github.com/Itseez/opencv | grep js-directory-link | sed 's|.* title="\(.*\)".*|\1|'
확인하려는 원격 지점을 알고 있다면 다음을 통해 최신 지점을 찾을 수 있습니다.
git ls-tree -r <remote_branch> --name-only
git clone하지만으로 할 수 있는 한 가지는를 전달하여 단일 개정판 만 가져 오는 것--depth 1입니다. 이것은 잠재적으로 많은 양의 기록을 가져 오는 것을 방지하고 "어떤 파일이 개정판에abcdef1234567890있습니까?" 와 같은 질문에 대답하기에 충분합니다.