Bagaimana Anda mengkloning repositori Git ke folder tertentu?

2244

Menjalankan perintah git clone [email protected]:whatevermembuat direktori di folder saya saat ini bernama whatever, dan menjatuhkan konten repositori Git ke folder itu:

/httpdocs/whatever/public

Masalah saya adalah bahwa saya perlu isi repositori Git yang dikloning ke direktori saya saat ini sehingga mereka muncul di lokasi yang tepat untuk server web:

/httpdocs/public

Saya tahu cara memindahkan file setelah saya mengkloning repositori, tetapi ini sepertinya membuat Git putus, dan saya ingin dapat memperbarui hanya dengan menelepon git pull. Bagaimana saya bisa melakukan ini?

David Smith
sumber
3
Pada Windows Anda dapat memindahkan file dari folder tempat Anda akan mengkloning repo [jika ada] sehingga kosong ketika Anda melakukan git clone . Setelah kloning, pindahkan file Anda kembali [ctrl-z] dan whoala ! Jika folder saat ini kosong gunakan saja: git clone giturl .
44
voila adalah ejaannya
Matthias
81
@MatthiasDailey voila adalah yang sebenarnya ejaan
silkfire
6
et voilà adalah bahasa Prancis untuk et
voilà

Jawaban:

3222

Opsi A:

git clone [email protected]:whatever folder-name

Ergo, untuk right heredigunakan:

git clone [email protected]:whatever .

Opsi B:

Pindahkan .gitfolder juga. Perhatikan bahwa .gitfolder disembunyikan di sebagian besar penjelajah file grafis, jadi pastikan untuk menampilkan file tersembunyi.

mv /where/it/is/right/now/* /where/I/want/it/
mv /where/it/is/right/now/.* /where/I/want/it/

Baris pertama mengambil semua file normal, baris kedua mengambil file dot. Mungkin juga untuk melakukannya dalam satu baris dengan mengaktifkan dotglob (yaitu shopt -s dotglob) tetapi itu mungkin solusi yang buruk jika Anda menanyakan pertanyaan yang dijawab oleh jawaban ini.

Lebih baik:

Simpan copy pekerjaan Anda di tempat lain, dan buat tautan simbolis. Seperti ini:

ln -s /where/it/is/right/now /the/path/I/want/to/use

Untuk kasus Anda ini akan menjadi seperti:

ln -sfn /opt/projectA/prod/public /httpdocs/public

Yang dengan mudah dapat diubah untuk menguji jika Anda menginginkannya, yaitu:

ln -sfn /opt/projectA/test/public /httpdocs/public

tanpa memindahkan file. Ditambahkan -fnjika seseorang menyalin garis-garis ini ( -fpaksa, -nhindari beberapa interaksi yang sering tidak diinginkan dengan tautan yang sudah ada dan yang tidak ada).

Jika Anda hanya ingin bekerja, gunakan Opsi A, jika orang lain akan melihat apa yang telah Anda lakukan, gunakan Opsi C.

Bisa Berk Güder
sumber
8
Saya belum memikirkan opsi 'Lebih baik lagi' Anda, dan saya menyukainya meskipun saya tidak yakin mengapa. Apa kelebihannya?
David Smith
6
Ini mungkin tidak memberikan keuntungan apa pun sekarang, tetapi mungkin menghemat banyak masalah jika Anda memutuskan untuk memindahkan barang-barang di suatu hari.
Can Berk Güder
12
Plus, Anda dapat beralih di antara rilis dengan cepat dengan opsi "Lebih baik lagi". Ini sangat berguna dan digunakan untuk server.
Halil Özgür
4
@MEM Saya pikir maksudnya membuat tautan simbolis ke .git yaituln -s path/to/.git path/to/working/directory
Alexander
27
Adakah yang bisa menjelaskan manfaat ini ?? Saya menjadi agak padat hari ini. Bagaimana cara menggunakan server manfaat symlink?
rangkap tiga
586

Contoh saya pikir banyak orang yang menanyakan pertanyaan ini setelah ini. Jika Anda berada di direktori yang Anda inginkan agar konten repositori git dibuang, jalankan:

git clone [email protected]:whatever .

"." pada bagian akhir menentukan folder saat ini sebagai folder checkout.

J Wynia
sumber
28
benar, jadi Anda tidak ingin menjalankan "git init" di folder ini sebelum melakukan kloning. Tetapi jika Anda melakukannya, maka menghapus folder .git sebelum kloning akan melakukan trik.
Magne
3
diperbaiki untuk direktori kosong dalam jawaban saya
csomakk
1
tidak bisa ini bekerja di nitrous.io? bahkan setelah pengosongan, dikatakan direktori tidak kosong
Tejas Manohar
@TejasManohar Pastikan Anda telah menghapus file tersembunyi juga.
Britic
ls -aakan menampilkan semua file, termasuk yang tersembunyi.
Michael Dorst
215

Masuk ke folder .. Jika folder kosong, maka:

git clone [email protected]:whatever .

lain

git init
git remote add origin PATH/TO/REPO
git fetch
git checkout -t origin/master
csomakk
sumber
9
Sebenarnya ini adalah jawaban yang paling berguna bagi saya ketika saya hanya perlu mendorong proyek yang sudah dibuat ke repositori yang baru dibuat. Pujian!
keras
13
Hanya jawaban yang menentukan cara checkout ke folder yang tidak kosong, terima kasih.
Preston Badeer
2
Ini benar-benar membantu karena switch -taktif tidak ditunjukkan dengan jelas pada dokumentasi git checkout .
Chetabahana
4
Apa yang dilakukan dengan -t switch? Saya menerima pesan batal dengan daftar file yang tidak terlacak yang akan ditimpa oleh checkout? Apa yang harus dilakukan dalam situasi ini? Saya tidak ingin file-file itu ditimpa?
Momin Zahid
2
Dokumentasi -t dari git: -t, --track Saat membuat cabang baru, atur konfigurasi "upstream". Lihat "--track" di git-branch (1) untuk detailnya.
csomakk
87

Kloning Repositori Basic Git

Anda mengkloning repositori dengan

git clone [url]

Misalnya, jika Anda ingin mengkloning perpustakaan Open Framework Git Stanford University Drupal yang disebut open_framework, Anda dapat melakukannya seperti ini:

$ git clone git://github.com/SU-SWS/open_framework.git

Itu menciptakan direktori bernama open_framework (di lokasi sistem file lokal Anda saat ini), menginisialisasi direktori .git di dalamnya, menarik semua data untuk repositori itu, dan memeriksa salinan versi terbaru yang berfungsi. Jika Anda masuk ke direktori open_framework yang baru dibuat, Anda akan melihat file proyek di sana, siap untuk dikerjakan atau digunakan.

Mengkloning Repositori ke dalam Folder Lokal Tertentu

Jika Anda ingin mengkloning repositori ke direktori bernama sesuatu selain open_framework, Anda dapat menentukan itu sebagai opsi baris perintah berikutnya:

$ git clone git:github.com/SU-SWS/open_framework.git mynewtheme

Perintah itu melakukan hal yang sama dengan yang sebelumnya, tetapi direktori target disebut mynewtheme.

Git memiliki sejumlah protokol transfer berbeda yang dapat Anda gunakan. Contoh sebelumnya menggunakan protokol git: //, tetapi Anda juga dapat melihat http: // atau user @ server: /path.git, yang menggunakan protokol transfer SSH.

Craig Gjerdingen
sumber
ini secara otomatis akan membuat folder di folder Anda saat ini dan meletakkan file di sana. Dengan demikian, Anda tidak perlu khawatir menimpa folder lain.
arn-arn
24

Untuk mengkloning git repositori ke folder tertentu, Anda dapat menggunakan -C <path>parameter, mis

git -C /httpdocs clone [email protected]:whatever

Meskipun masih akan membuat whateverfolder di atasnya, jadi untuk mengkloning konten repositori ke direktori saat ini, gunakan sintaks berikut:

cd /httpdocs
git clone [email protected]:whatever .

Perhatikan bahwa kloning ke direktori yang ada hanya diperbolehkan ketika direktori kosong .

Karena Anda melakukan kloning ke folder yang dapat diakses untuk umum, pertimbangkan untuk memisahkan repositori Git Anda dari pohon kerja Anda dengan menggunakan --separate-git-dir=<git dir>atau mengecualikan .gitfolder dalam konfigurasi server web Anda (misalnya dalam .htaccessfile).

kenorb
sumber
17

Untuk mengkloning ke Present Working Directory :

git clone https://github.com/link.git

Untuk mengkloning ke Direktori Lain :

git clone https://github.com/link.git ./Folder1/Folder2

Semoga Membantu :)

Sarat Chandra
sumber
ini bekerja untuk saya juga. bukan ./di awal jalan ke folder
Alon Gouldman
13

Ketika Anda memindahkan file ke tempat yang Anda inginkan, apakah Anda juga memindahkan .gitdirektori? Bergantung pada OS dan konfigurasi Anda, direktori ini mungkin disembunyikan.

Ini berisi repo dan file pendukung, sementara file proyek yang ada di /publicdirektori Anda hanya versi dalam komit check-out yang saat ini (cabang master secara default).

Paul
sumber
13

Klon:

git clone [email protected]:jittre/name.git

Kloning "cabang spesifik":

git clone -b [branch-name] [email protected]:jittre/name.git
Selvamani
sumber
13

Jika Anda ingin mengkloning ke folder saat ini, Anda harus mencoba ini:

git clone https://github.com/example/example.git ./
Luis
sumber
8
fatal: jalur tujuan '.' sudah ada dan bukan direktori kosong.
Cleiton
11

Pemakaian

git clone <repository>

Kloning repositori yang terletak di <repositori> ke mesin lokal. Repositori asli dapat ditemukan di sistem file lokal atau pada mesin jarak jauh yang dapat diakses melalui HTTP atau SSH.

git clone <repo> <directory>

Kloning repositori yang terletak di <repositori> ke folder yang disebut <direktori> pada mesin lokal.

Sumber: Menyiapkan repositori

Nagarjun
sumber
9

Pastikan Anda menghapus repositori .git jika Anda mencoba mengeceknya ke direktori saat ini.

rm -rf .git kemudian git clone https://github.com/symfony/symfony-sandbox.git

alex
sumber
3

Inilah cara saya akan melakukannya, tetapi saya telah membuat alias untuk melakukannya untuk saya.

$ cd ~Downloads/git; git clone https:git.foo/poo.git

Mungkin ada cara yang lebih elegan untuk melakukan ini, namun saya menemukan ini paling mudah untuk diri saya sendiri.

Inilah alias yang saya buat untuk mempercepat. Saya membuatnya untuk zsh, tetapi harus berfungsi baik untuk bash atau kulit lainnya seperti ikan, xyzsh, fizsh, dan sebagainya.

Edit ~/.zshrc,, /.bashrcdll. Dengan editor favorit Anda (milik saya adalah Leafpad, jadi saya akan menulis $ leafpad ~/.zshrc).

Preferensi pribadi saya, bagaimanapun, adalah membuat plugin zsh untuk melacak semua alias saya. Anda dapat membuat plugin pribadi untuk oh-my-zsh dengan menjalankan perintah ini:

$ cd ~/.oh-my-zsh/
$ cd plugins/
$ mkdir your-aliases-folder-name; cd your-aliases-folder-name
     # In my case '~/.oh-my-zsh/plugins/ev-aliases/ev-aliases'
$ leafpad your-zsh-aliases.plugin.zsh
     # Again, in my case 'ev-aliases.plugin.zsh'

Setelah itu, tambahkan baris ini ke file kosong alises.plugin baru Anda buat:

# Git aliases
alias gc="cd ~/Downloads/git; git clone "

(Dari sini, ganti namamu dengan namaku.)

Kemudian, untuk membuat alias bekerja, mereka (bersama dengan zsh) harus bersumber (atau apa pun namanya). Untuk melakukannya, di dalam dokumen plugin khusus Anda tambahkan ini:

## Ev's Aliases

#### Remember to re-source zsh after making any changes with these commands:

#### These commands should also work, assuming ev-aliases have already been sourced before:

allsource="source $ZSH/oh-my-zsh.sh ; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh; clear"
sourceall="source $ZSH/oh-my-zsh.sh ; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh"
#### 

####################################

# git aliases

alias gc="cd ~/Downloads/git; git clone "
# alias gc="git clone "
# alias gc="cd /your/git/folder/or/whatever; git clone "

####################################

Simpan plugin oh-my-zsh Anda, dan jalankan allsource. Jika itu tampaknya tidak berhasil, jalankan saja source $ZSH/oh-my-zsh.sh; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh. Itu akan memuat sumber plugin yang akan memungkinkan Anda untuk menggunakan allsourcemulai sekarang.


Saya sedang dalam proses membuat repositori Git dengan semua alias saya. Silakan memeriksanya di sini: File-file Ev . Silakan bercabang dan tingkatkan sesuai kebutuhan Anda.

Ev-
sumber
2

Jika Anda menggunakan sshuntuk git cloningAnda dapat menggunakan perintah berikut.

git -C path clone [email protected]:path_to_repo.git

contoh: git -C /home/ubuntu/ clone [email protected]:kennethreitz/requests.gitakan menarik repositori git requestske /home/ubuntu/path Anda .

Ankit Singh
sumber
2

Dari beberapa alasan sintaks ini tidak menonjol:

git clone repo-url [folder]

Folder Di sini adalah jalur opsional ke folder lokal (yang akan menjadi repositori lokal).

Git clonejuga akan pullkode dari repositori jarak jauh ke dalam repositori lokal. Sebenarnya itu benar:

git clone repo-url  =  git init + git remote add origin repo-url + git pull
prosti
sumber
0

Walaupun semua jawaban di atas bagus, saya ingin mengusulkan metode baru alih-alih menggunakan metode tautan simbolis dalam direktori html publik seperti yang diusulkan TERBAIK dalam jawaban yang diterima. Anda harus memiliki akses ke konfigurasi host virtual server Anda.

Ini adalah tentang mengonfigurasi host virtual dari server web Anda yang langsung menunjuk ke direktori repositori. Di Apache Anda dapat melakukannya seperti:

DocumentRoot / var / www / html / situs web / your-git-repo

Berikut adalah contoh file host virtual:

<VirtualHost *:443>
    ServerName example.com

    DocumentRoot /path/to/your-git-repo
    ...
    ...
    ...
    ...
</VirtualHost>
Tarik
sumber
0

Anda dapat menggunakan perintah git berikut untuk mengkloning dengan nama direktori kustom

git clone <git_repo_url> <your_custom_directory_name>

Catatan: Anda tidak perlu membuat direktori custome Anda karena itu akan dibuat secara otomatis

Manoj Rana
sumber
-1
For Windows user 

1> Open command prompt.
2> Change the directory to destination folder (Where you want to store your project in local machine.)
3> Now go to project setting online(From where you want to clone)
4> Click on clone, and copy the clone command.
5> Now enter the same on cmd .

It will start cloning saving on the selected folder you given .
Tarit Ray
sumber
-5

Mengenai baris ini dari pos asli:

"Aku tahu bagaimana cara memindahkan file setelah aku mengkloning repo, tapi ini sepertinya tidak berguna"

Saya dapat melakukan itu dan sejauh ini saya tidak melihat masalah dengan operasi add, commit, push, pull.

Pendekatan ini dinyatakan di atas, tetapi tidak dipecah menjadi beberapa langkah. Inilah langkah-langkah yang berhasil bagi saya:

  1. klon repo ke folder sementara yang baru
  2. cd ke folder root yang baru saja Anda kloning secara lokal
  3. salin seluruh isi folder, termasuk direktori /.git - ke folder yang ada yang Anda sukai; (katakanlah proyek gerhana yang ingin Anda gabungkan dengan repo Anda)

Folder yang ada yang baru saja Anda salin file, sekarang siap untuk berinteraksi dengan git.

Gene Bo
sumber