2009-07-24 17 views
86

Czy istnieje sposób na przeglądanie i wyświetlanie plików w repozytorium git bez klonowania go w pierwszej kolejności? Mogę zrobić ci w SVN za pomocą komendy:Przeglądaj i wyświetlaj pliki w repozytorium git bez klonowania

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

mogę rzekomo używać git pokaz, ale robi:

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

wynik do

 
fatal: Not a git repository 

Odpowiedz

61

Komenda chcesz, jest git ls-remote który pozwala aby uzyskać informacje o zdalnych repozytoriach, ale nie można wyświetlać katalogów historii lub listy ani niczego w tym poziomie: zasadniczo pozwala to tylko zobaczyć obiekty zdalne na bardzo wysokim poziomie vel (możesz zobaczyć aktualne HEAD i znaczniki na przykład).

Jedynym sposobem, aby robić to, co chcesz (jeśli dobrze rozumiem) byłoby użyć ssh aby uruchomić polecenie zdalne i powrotu wyników, na przykład:

ssh [email protected] "cd repo && git log -n 10" 

Co chcesz byłby piękny Funkcjonalność, jeśli mogliby ją dodać, ale z tego, co przeczytałem, nie jest zbyt łatwa, ponieważ pobieranie historii itp. wymaga dużej ilości informacji, aby być lokalnym do git, iw tym momencie równie dobrze mógłbyś zrobić pobieranie git.

+7

jedno można zrobić z 'git clone' , jest jednak, aby pobrać tylko jedną wersję, przekazując '--depth 1'. Pozwala to uniknąć pobierania dużej ilości historii i wystarczyłoby odpowiedzieć na pytania typu "jakie pliki są obecne w wersji' abcdef1234567890 "?" – ctrueden

16

Git jest rozproszony system kontroli wersji, natomiast Subversion jest scentralizowane (klient-serwer) system kontroli wersji. Działają inaczej; przyzwyczaić się do tego. Proszę przeczytać moją odpowiedź wyjaśniającą konsekwencje tej różnicy dla pytania git equivalent of svn status -u w StackOverflow.

Powtarzam sobie trochę: w scentralizowanym systemie kontroli wersji (jak CVS lub Subversion) prawie wszystkie polecenia są przetwarzane na serwerze i dotyczą sieci. Bardzo niewiele poleceń jest wykonywanych lokalnie. Zauważ, że aby mieć dobrą wydajność "svn status" i "svn diff" Subversion przechowuje "nieskazitelną kopię" sprawdzonej wersji na kliencie, aby nie musieć angażować transferu sieciowego dla tych typowych operacji (to znaczy, że Subversion checkout = 2 x rozmiar katalogu roboczego co najmniej).

W rozproszonym systemie kontroli wersji (takim jak Git, Mercurial lub Bazaar), gdzie znajduje się lokalna kopia (klon) całego repozytorium, prawie wszystkie polecenia są wykonywane na kliencie. Bardzo niewiele poleceń wymaga połączenia sieciowego z innym repozytorium (do serwera).

Liczba poleceń, które można wykonać na serwerze, jest ograniczona.

  • można wymienić wszystkie nazwy na zdalnych z "git ls-remote <URL>".
  • Można dostać migawkę (częściowo) z repozytorium (jeśli zdalny serwer umożliwiło) z
    "git archive --remote = <URL> głowie".
  • można sklonować tylko kilka ostatnich zobowiązuje (tak zwane "płytkie klonem") z
    "git clone --depth = 1 <URL>".
  • Jeśli serwer udostępnia interfejs internetowy git do repozytorium, można go użyć do przeglądania.
+23

Tak, jak jesteś prawdziwy, jeśli przeglądasz zdalne repozytorium bez wcześniejszego jego klonowania, to oczywiście zdecydowałeś, że można znieść funkcje offline git. Biorąc to pod uwagę, nie widzę powodu, aby udawać, że nie jest to przydatna funkcja dla niektórych rzeczy, na przykład lokalny klient, który pozwala na przeglądanie zawartości pliku zdalnego repo na miejscu. – LadyCailin

+8

Uzgodnione stanowisko, które przyjmuje Jakub, jest bardzo restrykcyjne. Warto zwrócić na siebie uwagę więcej niż raz, aby to podkreślić. – ctpenrose

+4

Nie podoba mi się ton "przyzwyczaić się do tego", ale kiedy przeczytałem do końca, znalazłem rozwiązanie mojego obecnego problemu - wating, aby zobaczyć, co jest w repozytorium 110 Mam jeden git, ale nie mam dostępu do ssh lub powłoki, a które są prawdopodobnie dość duże, około 12 GB lub więcej. Klon o zminimalizowanej głębokości pomaga przynajmniej zobaczyć ostatnią interesującą historię. i spraw, aby repozytorium git było jak najmniejsze. – Henning

16

Aby uzyskać więcej informacji na temat niektórych protokołów transportu, zobacz http://git-scm.com/book/en/Git-Internals-Transfer-Protocols. Zauważ, że to nie zadziała dla standardowego git przez SSH.

Dla git przez SSH, aktualny git po stronie serwera powinien umożliwiać archiwizację git bezpośrednio z pilota, który można następnie np. potokuj do "tar t", aby uzyskać listę wszystkich plików w danym zatwierdzeniu.

2

Prawdopodobnie jest to uważane za zabrudzone przez niektórych, ale bardzo praktyczne rozwiązanie w przypadku repozytoriów github jest tylko stworzenie skryptu, np. "Git-ls":

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

Zrób to wykonywalny i osiągalny przedmiotu: chmod a+x git-ls; sudo cp git-ls /usr/local/bin. Teraz wystarczy uruchomić go jak chcesz:

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

wiemy również, że istnieje git instaweb narzędzie do lokalnych plików. Posiadanie możliwości pokazywania plików i posiadania takiego serwera, moim zdaniem, nie niszczy żadnej z nieodłącznie zdecentralizowanych cech git.

+0

Nie otrzymuję żadnych wyników z tym. curl nic nie zwraca. –

+0

Zdecydowanie poleciłabym metodę api od Anaruga. Ta metoda wciąż działa jednak: 'curl -s https://github.com/Itseez/opencv | grep js-katalog-link | sed 's |. * title = "\ (. * \)". * | \ 1 |' ' –

3

Nie dokładnie, ale droga.

Zastosowanie GitHub Wywoływacz API

  1. Otwarcie to będzie Ci ostatnie rewizje.

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

    można uzyskać specyficzny popełnić szczegóły dołączając hash popełnić w końcu powyższego adresu URL.

  2. Wszystkie pliki (Musisz sha do głównego drzewa)

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

Mam nadzieję, że to może pomóc.

+11

Nie mylić Git z GitHub - Wierzę, że oryginalne pytania dotyczyły samego Gita. Instalacje Git/Hosting (GitHub/BitBucket/Stash) mogą mieć różne możliwości do repozytoriów przeglądarek. –

+0

Dobry pomysł @Anurag Kanungo Myślenie nieszablonowe – eonist

8

GitHub jest svn kompatybilne, dzięki czemu można korzystać z svn ls

svn ls https://github.com/user/repository.git/branches/master/ 

BitBucket obsługuje archiwum git więc można pobrać archiwum tar i lista zarchiwizowanych plików. To nie jest bardzo skuteczne, ale działa:

git archive [email protected]:repository HEAD directory | tar -t 
+1

Nie mieszaj Git z GitHub :) –

2

jeśli znasz zdalnego oddziału, który chcesz sprawdzić, można dowiedzieć się najnowszy poprzez:

git ls-tree -r <remote_branch> --name-only 
Powiązane problemy