Mam projekt z git i chcę po prostu sklonować lub pobrać określony katalog, taki jak myproject / javascript, tak jak robi to subversion.
wprowadź zmiany, zatwierdź i wypchnij ponownie.
To jest możliwe?
Mam projekt z git i chcę po prostu sklonować lub pobrać określony katalog, taki jak myproject / javascript, tak jak robi to subversion.
wprowadź zmiany, zatwierdź i wypchnij ponownie.
To jest możliwe?
Odpowiedzi:
git fetch
git checkout HEAD path/to/your/dir/or/file
Gdzie „ path/...
” w (3) zaczyna się w katalogu tuż poniżej katalogu głównego repozytorium zawierającego „ .../file
”
UWAGA: zamiast „HEAD” można użyć kodu skrótu określonego zatwierdzenia, a następnie otrzymasz wersję (plik) lub wersje (katalog) specyficzne dla tego zatwierdzenia.
--
nie jest jednak wymagany. Wymusza to, że bity po nim będą interpretowane jako ścieżka. Tak więc, jeśli masz plik o nazwie --help
, którą chcesz pobrać, wymagane będzie poprzedzenie go łącznikami:git checkout HEAD -- --help
W pustym katalogu:
git init
git remote add [REMOTE_NAME] [GIT_URL]
git fetch REMOTE_NAME
git checkout REMOTE_NAME/BRANCH -- path/to/directory
fetch
ani checkout
poleceń, możemy po prostu wykonać polecenie ściągania za remote add
poleceniem, aby uzyskać całą gałąź master.
Po wielu poszukiwaniach odpowiedzi, nie znajdowaniu, rezygnacji, ponownym próbowaniu itd., W końcu znalazłem rozwiązanie tego problemu w innym wątku SO:
Jak wyciągnąć wszystkie foldery oprócz jednego
Aby skopiować i wkleić to, co tam jest:
git init
git remote add -f origin <url>
git config core.sparsecheckout true
echo <dir1>/ >> .git/info/sparse-checkout
echo <dir2>/ >> .git/info/sparse-checkout
echo <dir3>/ >> .git/info/sparse-checkout
git pull origin master
Aby zrobić to, czego chce OP (pracować tylko z jednym katalogiem), po prostu dodaj ten jeden katalog .git/info/sparse-checkout
, wykonując powyższe kroki.
Ogromne podziękowania dla @cforbish!
master
. Tylko upewnij się, że robisz git branch --set-upstream-to=origin/<branch>
to poprawnie
To nie jest możliwe. Musisz wyciągnąć całe repozytorium lub nic.
Może to polecenie może być pomocne:
git archive --remote=MyRemoteGitRepo --format=tar BranchName_or_commit path/to/your/dir/or/file > files.tar
"Zrobione"
Jeśli chcesz uzyskać najnowsze zmiany w katalogu bez wprowadzania go, możesz:
$ git -C <Path to directory> pull
git clone --filter
z Git 2.19
Ta opcja faktycznie pomija pobieranie niepotrzebnych obiektów z serwera.
Napisałem szczegółową odpowiedź wyjaśniającą aktualny status wsparcia na: Jak sklonować podkatalog tylko repozytorium Git?
Jest bardzo prawdopodobne, że wszystko, co zostanie wdrożone git clone
w tym obszarze, będzie miało git pull
analogi.
Wypróbowałem i przetestowałem to działa!
mkdir <directory name> ; //Same directory name as the one you want to pull
cd <directory name>;
git remote add origin <GIT_URL>;
git checkout -b '<branch name>';
git config core.sparsecheckout true;
echo <directory name>/ >> .git/info/sparse-checkout;
git pull origin <pull branch name>
Mam nadzieję, że to było pomocne!
Czasami chcesz po prostu spojrzeć na poprzednie kopie plików bez rygoru przechodzenia przez diffs.
W takim przypadku równie łatwo jest utworzyć klon repozytorium i sprawdzić konkretne zatwierdzenie, które Cię interesuje i zajrzeć do podkatalogu w tym sklonowanym repozytorium. Ponieważ wszystko jest lokalne, możesz po prostu usunąć ten klon po zakończeniu.
Dla wszystkich tych zmagań z teoretycznymi ścieżkami plików i przykładami, tak jak ja, oto przykład ze świata rzeczywistego: Microsoft oferuje swoje dokumenty i przykłady w git hub, niestety zbierają wszystkie swoje przykładowe pliki dla dużej liczby tematów w tym repozytorium:
https://github.com/microsoftarchive/msdn-code-gallery-community-s-z
Byłem zainteresowany tylko plikami Microsoft Dynamics js na ścieżce
msdn-code-gallery-community-s-z/Sdk.Soap.js/
więc zrobiłem następujące
Stwórz
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
plik w folderze moich repozytoriów na dysku
git sparse-checkout init
w tym katalogu za pomocą polecenia cmd w systemie Windows
Zawartość pliku
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
jest
Sdk.Soap.js/*
w końcu zrobić
git pull origin master