Mam lokalne repozytorium Git o nazwie „szkielet”, którego używam do przechowywania szkieletów projektu. Ma kilka oddziałów dla różnych rodzajów projektów:
casey@agave [~/Projects/skeleton] git branch
* master
rails
c
c++
Jeśli chcę sprawdzić gałąź główną nowego projektu, mogę to zrobić
casey@agave [~/Projects] git clone skeleton new
Initialized empty Git repository in /Users/casey/Projects/new/.git/
i wszystko jest tak, jak tego chcę. W szczególności nowa gałąź główna wskazuje szkieletową gałąź główną, a ja mogę naciskać i ciągnąć, aby zmieniać zmiany w podstawowej konfiguracji projektu.
Jednak to, co nie działa, to jeśli chcę sklonować inną gałąź. Nie mogę go pobrać, więc wyciągam tylko gałąź, którą chcę, na przykład rails
gałąź, a następnie nowe repozytorium ma master
gałąź, która rails
domyślnie odpycha i pobiera z gałęzi repozytorium szkieletu .
Czy istnieje dobry sposób, aby to zrobić? A może to nie w ten sposób Git chce, żebym ustrukturyzował różne rzeczy i jestem z pewnością otwarty na to. Może powinienem mieć wiele repozytoriów, a repozytorium szkieletu Ruby on Rails śledzi repozytorium szkieletu głównego? I każdy indywidualny projekt klonujący repozytorium szkieletu Ruby on Rails.
git branch -a
pokazujegit checkout -b newbranch origin/branchiwant
działałoby lepiej? (bez--track
opcji)Odpowiedzi:
Uwaga: git1.7.10 (kwiecień 2012 r.) Umożliwia klonowanie tylko jednej gałęzi :
Możesz to zobaczyć w
t5500-fetch-pack.sh
:Tobu komentuje, że:
Od wersji Git 1.9.0 (luty 2014 r.) Płytkie klony obsługują przesyłanie danych (push / pull), więc ta opcja jest teraz jeszcze bardziej przydatna.
Zobacz więcej w „ Czy
git clone --depth 1
(płytki klon) jest bardziej użyteczny niż się wydaje? ”.„Cofanie” płytkiego klonu opisano w „ Konwertowaniu płytkiego klonu na pełny klon ” (git 1.8.3+)
Jak komentuje Chris :
W przypadku Git 2.26 (Q1 2020) „
git clone --recurse-submodules --single-branch
” używa teraz tej samej opcji pojedynczego odgałęzienia podczas klonowania submodułów .Zobacz zatwierdzenie 132f600 , zatwierdzenie 4731957 (21 lutego 2020 r.) Przez Emily Shaffer (
nasamuffin
) .(Połączone przez Junio C Hamano -
gitster
- w commit b22db26 , 05 marca 2020)źródło
git clone <url> --branch <branch> --single-branch <folder>
działa jak marzenie.clone --depth 1
najprostszy sposób na zaoszczędzenie przepustowości.--depth 1
są niebezpieczne dla użytkownika, ponieważ mogą chcieć faktycznie pchać / ciągnąć za pomocą nowego klonu.--single-branch
sięgit config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*
igit fetch --unshallow
(git V2.1.4)Jednym ze sposobów jest wykonanie następujących czynności.
Gdzie
branch_name
jest wybrana gałąź, a „/ your / folder” to folder docelowy dla tej gałęzi. To prawda, że przyniesie to inne gałęzie, dając ci możliwość łączenia się tam i z powrotem.Aktualizacja
Teraz, począwszy od Git 1.7.10, możesz teraz to zrobić
źródło
--single-branch
aby pobrać tylko historię powiązaną z tą gałęzią zamiast całej historii i tagów zawartych w repozytorium.Korzystając z Git w wersji 1.7.3.1 (w systemie Windows), oto co robię (
$BRANCH
to nazwa gałęzi, którą chcę pobrać i$REMOTE_REPO
jest to adres URL zdalnego repozytorium, z którego chcę sklonować):Zaletą tego podejścia jest to, że kolejne
git pull
(lubgit fetch
) połączenia będą również pobierać żądany oddział.źródło
git clone -b $BRANCH $REMOTE_REPO $BRANCH
afik są takie same?git clone -b
wszystkie zdalne referencje (wszystkie zdalne gałęzie i tagi) jakogit branch -a
pokazy. Z moim skryptem dostajesz tylko jeden ref.-t $BRANCH
działa nawet bez niego-f
, co można pobrać natychmiast. Następniegit fetch origin
pobierałby igit checkout $BRANCH
tworzył lokalny oddział i kasę. Jest to przydatne, gdy trzeba skonfigurować pilota przed pobraniem, npgit config remote.origin.uploadpack=/bin/upload-pack
.branch -a
pokazaneorigin/$BRANCH
. Robigit checkout origin/$BRANCH
stałe to.Możesz wypróbować długą drogę:
To robi:
Mam nadzieję, że będzie to coś, czego szukasz.
źródło
git branch -r
?git branch -r
nie daje danych wyjściowych.Możesz to zrobić za pomocą poniższego polecenia:
źródło
Ze strony podręcznika git-clone :
--single-branch
czy twój przyjaciel podczas klonowania pamiętaj o używaniu go,--branch <branch name>
czy klonowany będzie tylko zdalny główny HEAD (domyślnie master)Zawsze pamiętaj, aby zrobić Ctrl+, F5aby przeczytać świeże źródło, nie ten z pamięci podręcznej :-) (długo nie wiedziałem o tej opcji).
źródło
Wystarczy wpisać adres URL i nazwę oddziału.
źródło
Sklonuj tylko jedną gałąź. To najprostszy sposób:
źródło
Do klonowania określonej gałęzi możesz:
git clone --branch yourBranchName [email protected]
źródło
Do klonowania gałęzi Git, do której nie masz klucza publicznego, użyj tego:
źródło
Otwórz cmd.
cd folder_name
(wprowadź ścieżkę do sklonowania gałęzi)Tylko jedno polecenie:
źródło
Trochę późno, ale chciałem dodać rozwiązanie, którego użyłem do rozwiązania tego problemu. Tutaj znalazłem rozwiązanie .
W każdym razie wydaje się, że pytanie brzmi „jak rozpocząć nowy projekt z oddziału innego repo?”.
W tym celu zastosowałem rozwiązanie polegające na utworzeniu nowego repo w github lub gdziekolwiek. Będzie to służyć jako repozytorium do nowego projektu.
Na komputerze lokalnym przejdź do projektu, który ma gałąź, której chcesz użyć jako szablonu dla nowego projektu.
Uruchom polecenie:
Spowoduje to przeniesienie old_branch do new-repo i uczynienie z niego gałęzi master nowego repo.
Następnie wystarczy sklonować nowe repozytorium do lokalnego katalogu nowego projektu i nowy projekt rozpoczął się w starym oddziale.
źródło
Weźmy przykład repozytorium kolby. Ma 3 gałęzie oprócz master. Sprawdźmy zdalną gałąź 1.1.x.
sklonuj repozytorium git
cd do repozytorium.
pobierz zdalną gałąź 1.1.x
sprawdź oddział
Nastąpi przejście do gałęzi 1.1.x, która będzie śledzić zdalną gałąź 1.1.x.
źródło
Podobne do tego, co powiedział @ nosaiba-darwish tutaj: tutaj
Tak zwykle robimy w naszej firmie:
git clone -b <name_of_branch> --single-branch <git_url> folder_to_clone_locally
źródło
Jeśli chcesz mieć płytkiego klona, możesz to zrobić za pomocą:
--depth=1
implikuje--single-branch
.źródło
Są na to przede wszystkim 2 rozwiązania:
git clone -b <BRANCH_NAME> <GIT_REMOTE_URL>
Przykład: git clone -b tahir https://github.com/Repository/Project.git
Następujące polecenie sklonuje gałąź tahir z repozytorium git. Powyższe polecenie klonuje tylko określoną gałąź, ale pobiera szczegóły innych gałęzi. Możesz wyświetlić szczegóły wszystkich gałęzi za pomocą polecenia.
git branch -a
git clone -b <BRANCH_NAME> --single-branch <GIT_REMOTE_URL>
Przykład: git clone -b tahir --single-branch https://github.com/Repository/Project.git
Teraz, jeśli zrobisz
git branch -a
, pokaże tylko bieżącą pojedynczą gałąź, którą sklonowałeś, a nie wszystkie gałęzie, więc to zależy od ciebie, jak chcesz.Mam nadzieję, że kiedyś komuś pomoże !!
źródło
możesz użyć tego polecenia, aby uzyskać pojedynczy oddział i zmienić nazwę folderu, jeśli chcesz pozostawić rozgałęziony autonomiczny
przykład
źródło
git clone --branch {branch-name} {repo-URI}
Przykład:
git clone --branch dev https://github.com/ann/cleaningmachine.git
{branch-name}
{repo-URI}
źródło
Można to zrobić w 2 krokach
Sklonuj repozytorium
git clone <http url>
Kasa, którą chcesz
git checkout $BranchName
źródło