Git ile bir proje var ve ben sadece kime veya sadece subversion yaptığı gibi myproject / javascript gibi belirli bir dizini çekmek istiyorum.
bazı değişiklikler yapın, taahhüt edin ve tekrar geri itin.
Mümkün?
Git ile bir proje var ve ben sadece kime veya sadece subversion yaptığı gibi myproject / javascript gibi belirli bir dizini çekmek istiyorum.
bazı değişiklikler yapın, taahhüt edin ve tekrar geri itin.
Mümkün?
Yanıtlar:
git fetch
git checkout HEAD path/to/your/dir/or/file
Nerede " path/...
" (3) sadece repo kök içeren altında dizinde başlar içinde sizin " .../file
"
"HEAD" yerine belirli bir taahhüdün karma kodunun kullanılabileceğini ve daha sonra bu kesinliğe özgü revizyonu (dosya) veya revizyonları (dir) alacağınızı unutmayın.
--
gerekli değildir. Bundan sonraki bitleri bir yol olarak yorumlamaya zorlar. Yani, evet, --help
ödeme yapmak istediğiniz ada sahip bir dosyanız varsa, bu tire ile ön ek yapmanız gerekir:git checkout HEAD -- --help
Boş bir dizinde:
git init
git remote add [REMOTE_NAME] [GIT_URL]
git fetch REMOTE_NAME
git checkout REMOTE_NAME/BRANCH -- path/to/directory
fetch
veya checkout
komutlara gerek yoktur remote add
, tüm ana dalı almak için komuttan sonra çekme isteğini basitçe yapabiliriz .
Çok bir cevap aradıktan sonra bulmak değil, vazgeçmek, tekrar denemek vb. Sonunda başka bir SO iş parçacığında buna bir çözüm buldum:
Bir klasör dışında tümünü git-pull nasıl
Neleri kopyalayıp yapıştırmak için:
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
OP'nin istediklerini yapmak için (sadece bir dir üzerinde çalışın), .git/info/sparse-checkout
yukarıdaki adımları uygularken o dir 'ü ekleyin .
@Cforbish'e çok teşekkürler!
master
. Sadece emin yetinmek git branch --set-upstream-to=origin/<branch>
doğru çekmeye
Bu mümkün değil. Tüm havuzu veya hiçbir şeyi çekmeniz gerekiyor.
Belki bu komut yardımcı olabilir:
git archive --remote=MyRemoteGitRepo --format=tar BranchName_or_commit path/to/your/dir/or/file > files.tar
"Et voilà"
Bir dizindeki en son değişiklikleri girmeden almak istiyorsanız, şunları yapabilirsiniz:
$ git -C <Path to directory> pull
git clone --filter
Git 2.19'dan
Bu seçenek aslında gereksiz nesneleri sunucudan getirmeyi atlar.
Şu andaki destek durumunu açıklayan ayrıntılı bir cevap yazdım: Yalnızca Git deposunun bir alt dizinini nasıl klonlayabilirim?
O git clone
bölgede uygulanan her şeyin git pull
analogları da olması muhtemeldir .
Bu işleri denedim ve test edin!
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>
Umarım bu yardımcı oldu!
Bazen, diffs'den geçmeden önce dosyaların önceki kopyalarına bakmak istersiniz.
Böyle bir durumda, bir havuzun klonunu yapmak ve ilgilendiğiniz belirli taahhüdü kontrol etmek ve o klonlanmış depodaki alt dizine bakmak kolaydır. Her şey yerel olduğundan, işiniz bittiğinde bu klonu silebilirsiniz.
Teorik dosya yolları ve yaptığım gibi örneklerle tüm bu mücadele için, burada gerçek bir dünya örneği: Microsoft, belgelerini ve örneklerini git hub'da sunuyor, maalesef bu depodaki çok sayıda konu için tüm örnek dosyalarını topluyorlar:
https://github.com/microsoftarchive/msdn-code-gallery-community-s-z
Yalnızca yoldaki Microsoft Dynamics js dosyalarıyla ilgileniyordum
msdn-code-gallery-community-s-z/Sdk.Soap.js/
bu yüzden aşağıdakileri yaptım
oluşturmak
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
diskteki depolarım klasöründeki dosya
git sparse-checkout init
o dizinde pencerelerde cmd kullanarak
Dosya içeriği
msdn-code-gallery-community-s-zSdkSoapjs\.git\info\sparse-checkout
dır-dir
Sdk.Soap.js/*
sonunda bir
git pull origin master