Saya memiliki direktori A dengan file direktori yang cocok B. Direktori A mungkin memiliki file lain yang diperlukan. Direktori B adalah repo git.
Saya ingin mengkloning direktori B ke direktori A tetapi git-clone tidak mengizinkan saya karena direktori tersebut tidak kosong.
Saya berharap itu hanya akan mengkloning. Git dan karena semua file yang cocok saya bisa pergi dari sana?
Saya tidak bisa mengkloning ke direktori kosong karena saya punya file di direktori A yang tidak ada di direktori B dan saya ingin menyimpannya.
Menyalin .git bukanlah suatu pilihan karena saya ingin referensi mendorong / menarik dan saya tidak ingin mengaturnya secara manual.
Apakah ada cara untuk melakukan ini?
Pembaruan: Saya pikir ini berfungsi, adakah yang bisa melihat masalah? ->
cd a
git clone --no-hardlinks --no-checkout ../b a.tmp
mv a.tmp/.git .
rm -rf a.tmp
git unstage # apparently git thinks all the files are deleted if you don't do this
Jawaban:
Ini bekerja untuk saya:
CATATAN:
-t
akan mengatur cabang hulu untuk Anda, jika itu yang Anda inginkan, dan biasanya itu.sumber
git reset origin/master
setelahgit fetch
, itu akan berhasil (juga menjaga setiap perubahan lokal).git checkout ...
git mengeluh bahwa semua file saya akan ditimpa dan saya harus memindahkannya terlebih dahulu. Ketika saya melakukan `git reset asal / master /` pertama, perintah checkout mengeluh bahwa cabang bernama master sudah ada.git checkout master
adalah langkah terakhir yang cukup bagi saya.fatal: A branch named 'master' already exists
. Saya pikir saya tidak benar-benar membutuhkannya.Dalam perintah shell berikut
existing-dir
adalah direktori yang isinya cocok dengan file yang dilacak dalamrepo-to-clone
repositori git.sumber
git reset --hard HEAD
atau itu tidak akan menyerah pada file "dihapus".git reset HEAD
bekerja dengan baik untuk saya.git reset --hard HEAD
menghancurkan semua perubahan pada file Anda, jadi jika mereka tidak persis sama dengan file dalam repositori, Anda tidak boleh melakukan itu.git reset HEAD
tampaknya tidak berpengaruh bagi saya.git reset --hard HEAD
tidak - tetapi kehilangan semua perubahan yang Anda buat pada file. Apakah ada solusi yang lebih baik?Sedikit modifikasi pada salah satu jawaban yang berhasil bagi saya:
untuk mulai bekerja pada cabang master langsung.
sumber
git branch --set-upstream-to=origin/master master
.Peringatan - ini berpotensi menimpa file.
Dimodifikasi dari jawaban @ cmcginty - tanpa -f itu tidak berfungsi untuk saya
sumber
git checkout .
?Inilah yang akhirnya saya lakukan ketika saya memiliki masalah yang sama (setidaknya saya pikir itu masalah yang sama). Saya pergi ke direktori A dan berlari
git init
.Karena saya tidak ingin file dalam direktori A diikuti oleh git, saya mengedit .gitignore dan menambahkan file yang ada ke dalamnya. Setelah ini saya menjalankan
git remote add origin '<url>' && git pull origin master
et voíla, B "dikloning" menjadi A tanpa cegukan tunggal.sumber
Saya telah menggunakan ini beberapa saat yang lalu, membutuhkan perintah yang paling tidak berpotensi merusak:
Dan voila!
sumber
Resep sederhana lain sepertinya bekerja dengan baik untuk saya:
Kasus penggunaan utama saya untuk memeriksa ke direktori dengan file yang ada adalah untuk mengontrol dotfiles Unix saya dengan Git. Pada akun baru, direktori home sudah memiliki beberapa file di dalamnya, bahkan mungkin yang ingin saya dapatkan dari Git.
sumber
.git/config
File menunjukkan bahwa repo kosong. 2.) File yang biasanya disimpan.git
disimpan di root (yang Anda panggil.git
).git
dan pengaturancore.bare
untukfalse
akan mengurus, jadi saya masih merasa baik tentang metode ini.Ini bekerja untuk saya:
sumber
Saya memiliki masalah yang sama dengan direktori web Apache baru (akun dibuat dengan WHM) yang saya rencanakan untuk digunakan sebagai server web pementasan. Saya awalnya perlu mengkloning proyek baru saya dengan basis kode di sana dan secara berkala menyebarkan perubahan dengan menarik dari repositori.
Masalahnya adalah bahwa akun tersebut sudah berisi file server web seperti:
... yang saya tidak ingin hapus atau komit ke repositori saya. Saya membutuhkan mereka untuk tinggal di sana tanpa panggung dan tidak terlacak.
Apa yang saya lakukan:
Saya pergi ke folder web saya (existing_folder):
lalu:
Ini ditampilkan (seperti yang diharapkan) daftar banyak file tidak dipentaskan - yang sudah ada pada awalnya dari akun web cPanel saya.
Kemudian, berkat artikel ini , saya baru saja menambahkan daftar file-file itu ke:
File ini, hampir seperti
.gitignore
file itu, memungkinkan Anda untuk mengabaikan file yang dipentaskan. Setelah ini, saya tidak punya komitmen di direktori .git / - ini berfungsi seperti pribadi.gitignore
yang tidak dapat dilihat orang lain.Sekarang memeriksa
git status
pengembalian:Sekarang saya dapat menyebarkan perubahan ke server web ini hanya dengan menarik dari repositori git saya. Semoga ini membantu beberapa pengembang web untuk dengan mudah membuat server pementasan.
sumber
Inilah yang saya lakukan:
sumber
Mungkin saya salah mengerti pertanyaan Anda, tetapi tidakkah akan lebih mudah jika Anda menyalin / memindahkan file dari A ke git repo B dan menambahkan yang diperlukan dengan git add ?
PEMBARUAN: Dari git doc:
SUMBER: http://git-scm.com/docs/git-clone
sumber
Saya mencari sesuatu yang serupa, dan inilah yang saya pikirkan:
Situasi saya adalah di mana saya memiliki pohon web aktif dan saya mencoba membuat repositori jarak jauh tanpa memindahkan salah satu file di pohon web saat ini. Inilah yang saya lakukan:
git init
git clone --bare /path/to/web/repo
[remote "origin"]
bagian tersebut.[remote "origin"]
bagian ke .git / config di pohon web yang menunjuk ke repo jarak jauh yang baru.sumber
git clone --bare
sini berlebihan dan berputar-putar. Mengapa tidak hanyagit remote add origin <URL>
di tempat pertama?ini berfungsi untuk saya, tetapi Anda harus menggabungkan file repositori jarak jauh ke file lokal:
sumber
Saya menyukai jawaban Dale , dan saya juga menambahkan
Kedalaman dangkal menghindari banyak komitmen dev awal ekstra. Cabang baru memberi kami sejarah visual yang baik bahwa ada beberapa kode baru dari server ini yang ditempatkan. Itulah cabang penggunaan yang sempurna menurut saya. Terima kasih banyak untuk semua orang yang memposting di sini.
sumber
Saya mendapat masalah yang sama ketika mencoba mengkloning ke c / kode
Tetapi folder ini berisi sejumlah besar proyek.
Saya membuat folder baru di c / code / newproject dan memetakan klon saya ke folder ini.
git untuk desktop kemudian meminta pengguna saya dan kemudian dikloning dengan baik.
sumber