2013-04-18 10 views
8

Czy istnieje sposób przekazania zatwierdzenia do zdalnego repozytorium git, bez wcześniejszego tworzenia lokalnego klonu tego repo?Jak zaktualizować plik w zdalnym repo, bez wcześniejszego klonowania tego repo?

Mam poprawny adres URL dla zdalnego repozytorium, znam ścieżkę pliku i wszystko, co chcę zrobić, to przekazać zaktualizowaną wersję pliku do wzorca. Najlepiej byłoby, gdyby działał z dowolnym poprawnym adresem URL do repozytorium zdalnego, ale byłby przydatny, gdyby działał tylko z adresami git opartymi na https.

Zgaduję, że jest to niemożliwe, ponieważ nie wydaje się możliwe nawet pobranie pojedynczego pliku bez klonowania w ogólnym przypadku, zgodnie z odpowiedzią How to "git show" on a remote repo?. Ale mam nadzieję, że istnieje obejście, które wykorzystuje niektóre polecenia git niższego poziomu.

+1

Nie sądzisz, że to możliwe, ani nie powinno tak naprawdę, dlaczego miałbyś edytować pliki bez całego repozytorium? –

+1

Jeśli zdalne repo jest hostowane na stronie [github] (http://github.com), możesz edytować plik bezpośrednio w tym miejscu. W przeciwnym razie nie sądzę, że to możliwe. –

+1

@MadaraUchiha Dlaczego? Ponieważ czasami wystarczy dokonać niewielkiej zmiany na masowe repozytorium, a sklonowanie całej sprawy kosztuje dużo czasu. W moim przypadku aplikacja do zarządzania musi aktualizować metadane zawarte w setkach repozytoriów git, ale nie chce przechowywać lokalnych kopii wszystkich z nich tylko w tym celu. – algal

Odpowiedz

7

Niemożliwe. Ale ponieważ przyszłe zatwierdzenie musiałoby mieć tylko jedno zatwierdzenie jako jego rodzica, możliwe jest zastosowanie tak zwanego "płytkiego klonowania" i pobranie tylko zatwierdzenia końcówki gałęzi, której potrzebujesz. Spowoduje to tylko minimalna ilość obiektów z pilota. Poszukaj opcji wiersza polecenia z git clone.

+0

Ciekawa funkcja! Strony podręcznika brzmią jednak tak: "nie możesz go sklonować ani pobrać z niego, ** ani nie wepchnąć ani nie wejść do niego ** _.Więc nawet jeśli mógłbyś użyć tego do stworzenia łaty i wysłać łatkę indywidualnie, to nie pomoże ci automatycznie przesuwać zmian. – Shahbaz

+0

@Shahbaz Instrukcja jest w rzeczywistości nieprawidłowa, możesz od niej oderwać ... – poke

+0

@Poke, nie próbowałem, ale jeśli masz pewność, rozważ zgłoszenie błędu na stronie podręcznika. – Shahbaz

3

Nie, nie sądzę, że to możliwe. Aby to działało, musisz sklonować całe repozytorium. Git musi wiedzieć o wszystkich plikach i .git, aby wykonać swoje zadanie poprawnie. Dlatego nie można po prostu przesyłać dowolnych plików w ten sposób.

1

@algal, dla konkretnego przypadku użycia, możesz może być w stanie użyć submodułu (http://git-scm.com/docs/git-submodule). Można klonować i zatwierdzać do submodułu, bez klonowania "supermoduły", który mógłby zawierać "masywny" kod, o którym wspomniałeś. Supermoduł mógłby odwoływać się do submodułu dla wspomnianych informacji konfiguracyjnych.

0

Tak można wcisnąć nową wersję używając tagging

śledzić to kroki

w nowym katalogu głównym projektu

  1. git init
  2. git remote add origin [email protected]:yourusername/yourpoject
  3. git tag -a v2.0 -m 'version 2.0'
  4. git add .
  5. git commit -m "New Version 2.0 :rocket:"
  6. git push -u origin v2.0

teraz masz nowy oddział o nazwie v2.0 ze swoim nowym projektem a mistrz oddział pozostaje nietknięty. Po tym, jeśli nie możesz zmienić domyślnego odgałęzienia w ustawieniach projektu github.

Powiązane problemy