programing

복제하지 않고 git 저장소에서 파일 찾아보기 및 표시

nasanasas 2020. 8. 15. 09:24
반응형

복제하지 않고 git 저장소에서 파일 찾아보기 및 표시


먼저 복제하지 않고 git repo에서 파일을 찾아보고 표시하는 방법이 있습니까? 명령을 사용하여 svn에서 수행 할 수 있습니다.

svn ls / path / to / repo 
svn cat / path / to / repo / file-in-repo

나는 아마도 git show를 사용할 수 있지만 다음을 수행합니다.

git show / path / to / repo
git show HEAD : / path / to / repo

결과

치명적 : git 저장소가 아님

원하는 명령 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 체크 아웃 = 2 x 최소한 작업 디렉토리의 크기).

전체 저장소의 로컬 복사본 (복제)이있는 분산 버전 제어 시스템 (예 : Git, Mercurial 또는 Bazaar)에서는 거의 모든 명령이 client에서 수행됩니다 . 매우 적은 명령으로 다른 저장소 (서버)에 네트워크 연결이 필요합니다.

서버에서 수행 할 수있는 명령 수는 제한되어 있습니다.

  • " git ls-remote <URL>"을 사용 하여 원격에있는 모든 참조를 나열 할 수 있습니다 .

  • " git archive --remote = <URL> HEAD"를 사용하여 저장소 (원격 서버가 활성화 된 경우)의 (일부) 스냅 샷을 얻을 수 있습니다 .

  • " git clone --depth = 1 <URL>"을 사용 하여 몇 개의 마지막 커밋 ( "shallow clone"이라고 함) 만 복제 할 수 있습니다 .
  • 서버가 저장소에 git 웹 인터페이스를 제공하는 경우이를 사용하여 찾아 볼 수 있습니다.

일부 전송 프로토콜에서이를 수행하는 방법에 대한 정보 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 사용

  1. 이것을 열면 최근 커밋을 얻을 수 있습니다.

    https://api.github.com/repos/learningequality/ka-lite/commits

    위의 URL 끝에 커밋 해시를 첨부하여 특정 커밋 세부 정보를 얻을 수 있습니다.

  2. 모든 파일 (메인 트리에 sha가 필요합니다)

    https://api.github.com/repos/learningequality/ka-lite/git/trees/7b698a988683b161bdcd48a949b01e2b336b4c01

이것이 도움이되기를 바랍니다.


This is probably considered dirty by some, but a very practical solution in case of github repositories is just to make a script, e.g. "git-ls":

#!/bin/sh
remote_url=${1:? "$0 requires URL as argument"}
curl -s $remote_url | grep js-directory-link | sed "s/.* title=\"\(.*\)\".*/\1/"

Make it executable and reachable of course: chmod a+x git-ls; sudo cp git-ls /usr/local/bin. Now, you just run it as you wish:

git-ls https://github.com/mrquincle/aim-bzr
git-ls https://github.com/mrquincle/aim-bzr/tree/master/aim_modules

Also know that there is a git instaweb utility for your local files. To have the ability to show files and have a server like that does in my opinion not destroy any of the inherent decentralized characteristics of git.


if you know the remote branch you want to check, you can find out the latest via:

git ls-tree -r <remote_branch> --name-only

참고URL : https://stackoverflow.com/questions/1178389/browse-and-display-files-in-a-git-repo-without-cloning

반응형