Git klonu .git dizini olmadan


145

gitBir klon yaparken geçilecek bir bayrak var mı , .gitdizini klonlama deyin ? Değilse .git, klondan sonra dizini silmek için bir bayrak nasıl olur ?


41
Bu soru, "git export" ("svn export" gibi) nasıl yapılır dupe değildir . Bu soru , dizin olmadan bir (uzak) havuzun nasıl kopyalanacağını sorar . İddia edilen dupe , dizinin zaten bulunduğu mevcut bir deponun nasıl dışa aktarılacağını sorar . .git.git
mknaf

3
Katılıyorum. git archive"Olası yinelenen" çözümün söylediği gibi uzak depoyu kullanamazsınız .
Vladislav Rastrusny

Yanıtlar:


215

kullanım

git clone --depth=1 --branch=master git://someserver/somerepo dirformynewrepo
rm -rf ./dirformynewrepo/.git
  • Derinlik seçeneği, bu repoyu elde etmek için mümkün olan en az tarihin kopyalanmasını sağlar.
  • Şube seçeneği isteğe bağlıdır ve belirtilmezse master elde edilir.
  • İkinci satır, dizininizi dirformynewrepoartık Git deposu yapmaz.
  • Yinelemeli alt modül klonu yapıyorsanız, derinlik ve dal parametresi alt modüller için geçerli değildir.

19
ne !$/.gitdemek
Jürgen Paul

15
İlgilenenler için, Bash ve zsh'daki tarih genişletme özelliğinin bir parçası olan sözcük belirleyicilerinden biridir .
Rufflewind

Repodaki tüm dalların derinliğini = 1 almanın bir yolu var mı? sadece usta veya belirtilen şube değil
Gayan Pathirage

2
bunu --no-single-branch seçeneği ile yaparsınız, çünkü --depth --single-branch anlamına gelir, --no-single-branch ile bunu ima edebilirsiniz. (Git klon adam sayfasından alınmıştır)
Robert Stoddard

8
Kullanma !$bu durumda teknik olarak doğru iken, sözdizimi gerçek sorunun cevabını anlamaya tanımaz yardım insanlara hiçbir şey yapmaz. Aynı zamanda doğrudan ilk komuttan sonra ve aynı kabuk içinde ikinci komuta da dayanır. Herhangi biri bu örtük gereksinimleri atlarsa, başka bir şeyi tamamen silebilir. Bu nedenle , her iki komut arasındaki bağlantıyı daha net hale getireceğinden, adı açıkça komut dirformynewrepoiçin bir argüman olarak belirterek yanıtınızın geliştirilebileceğini öneriyorum rm.
davidA

29

yalnızca dosyaları istediğiniz için, dosyayı bir git repo olarak değerlendirmenize gerek yoktur.

rsync -rlp --exclude '.git' user@host:path/to/git/repo/ .

ve bu yalnızca yerel yolla ve uzak ssh / rsync yoluyla çalışır, uzak sunucu yalnızca git: // veya https: // erişimi sağlıyorsa çalışmayabilir.


.gitignore dikkate alınmaz?
JJ Roman

itub haklı, bu sadece çalışma ağacını kopyalıyor. git checkout bunu düzgün yapmak için kullanıldı, şimdi artık yok.
Sylvain

sunucu yalnızca git: // erişimini sağlıyorsa ne yaparsınız?
Rainb

5

Alternatif olarak, Node.js yüklüyse, aşağıdaki komutu kullanabilirsiniz:

npx degit GIT_REPO

npxDüğüm ile birlikte gelir ve ikili düğüm tabanlı paketleri ilk önce yüklemeden çalıştırmanıza izin verir (alternatif olarak, önce degitküresel olarak yükleyebilirsiniz npm i -g degit).

Degit , git klasörünü tutmadan bir havuzu kopyalayarak hızlı bir şekilde yeni bir proje oluşturmak için kullandığı Svelte ve Rollup'un yaratıcısı Rich Harris tarafından oluşturulan bir araçtır. Ancak herhangi bir repoyu bir kez klonlamak için de kullanılabilir ...


-1

Her zaman yapabilirsin

git clone git://repo.org/fossproject.git && rm -rf fossproject/.git

45
her şeyi indirmek ve daha sonra dir silmek? örneğin emacs, .git dosyasında 1 GB'nin% 95'ine sahiptir. yani --depth = 1 buradaki çözümdür.
RParadox

1
derinlik = 1 yaptığımda hala .git klasörünü görüyorum
Aryeh Armon

@AryehArmon tabii ki görüyorsun. --Depth kullanmak .git oluşturulmasını engellemez, sadece sığ bir kopya yapar, .git için çok daha küçük bir boyut oluşturur. Ama orada hiç istemiyorsanız, daha sonra kaldırmanız gerekir.
zeycus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.