Kemarin, saya memposting pertanyaan tentang cara mengkloning repositori Git dari satu komputer saya ke yang lain, Bagaimana saya bisa 'git klon' dari komputer lain? .
Saya sekarang berhasil mengkloning repositori Git dari sumber saya (192.168.1.2) ke tujuan saya (192.168.1.1).
Tetapi ketika saya melakukan edit ke file, a git commit -a -m "test"
dan a git push
, saya mendapatkan kesalahan ini pada tujuan saya (192.168.1.1):
git push
[email protected]'s password:
Counting objects: 21, done.
Compressing objects: 100% (11/11), done.
Writing objects: 100% (11/11), 1010 bytes, done.
Total 11 (delta 9), reused 0 (delta 0)
error: refusing to update checked out branch: refs/heads/master
error: By default, updating the current branch in a non-bare repository
error: is denied, because it will make the index and work tree inconsistent
error: with what you pushed, and will require 'git reset --hard' to match
error: the work tree to HEAD.
error:
error: You can set 'receive.denyCurrentBranch' configuration variable to
error: 'ignore' or 'warn' in the remote repository to allow pushing into
error: its current branch; however, this is not recommended unless you
error: arranged to update its work tree to match what you pushed in some
error: other way.
error:
error: To squelch this message and still keep the default behaviour, set
error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To git+ssh://[email protected]/media/LINUXDATA/working
! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'git+ssh://[email protected]/media/LINUXDATA/working'
Saya menggunakan dua versi Git yang berbeda (1,7 pada remote dan 1,5 pada mesin lokal). Apakah itu alasan yang mungkin?
git config receive.denyCurrentBranch=updateInstead
: stackoverflow.com/a/28262104/6309Jawaban:
Anda cukup mengonversi repositori jauh ke repositori kosong (tidak ada salinan yang berfungsi di repositori kosong - folder hanya berisi data repositori yang sebenarnya).
Jalankan perintah berikut di folder repositori jarak jauh Anda:
Kemudian hapus semua file kecuali
.git
di folder itu. Dan kemudian Anda akan dapat melakukangit push
ke repositori jarak jauh tanpa kesalahan.sumber
git config --bool core.bare true
. Apakah ada alasan tertentu mengapa beberapa file perlu dihapus? Jika demikian, dapatkah Anda lebih tepat tentang apa yang perlu dihapus?Saya hanya memiliki kesalahan yang sama ketika saya mulai belajar Git . Beberapa jawaban lain jelas bukan untuk seseorang yang baru mengenal Git!
(Saya akan menggunakan istilah-istilah non teknis untuk menyampaikan ide.) Bagaimanapun, apa yang terjadi adalah Anda memiliki dua repositori, satu adalah yang asli Anda buat pertama kali, dan yang lainnya karya yang baru saja Anda buat.
Saat ini Anda berada di repositori kerja Anda dan menggunakan cabang "master". Tetapi Anda juga "login" di repositori asli ke cabang "master" yang sama. Sekarang karena Anda "masuk" dalam dokumen asli, Git khawatir Anda mungkin mengacaukannya karena Anda mungkin mengerjakan yang asli dan mengacaukan semuanya. Jadi, Anda perlu kembali ke repositori asli dan melakukan "git checkout someotherbranch", dan sekarang Anda bisa mendorong tanpa masalah.
Saya harap ini membantu.
sumber
git checkout -b tmp
. Kemudian pada sumber repo:git push
. Kemudian kembali ke target (opsional):git checkout master; git branch -d tmp
Pesan kesalahan menjelaskan apa yang terjadi. Versi Git yang lebih modern menolak untuk memperbarui cabang melalui push jika cabang itu dicentang.
Cara termudah untuk bekerja di antara dua repositori non-telanjang adalah dengan
selalu perbarui repositori dengan menarik (atau mengambil dan menggabungkan) atau, jika Anda harus,
dengan mendorong ke cabang terpisah (cabang impor) dan kemudian menggabungkan cabang itu ke cabang master pada mesin jarak jauh.
Alasan pembatasan ini adalah bahwa operasi push hanya beroperasi pada repositori Git jarak jauh, ia tidak memiliki akses ke indeks dan pohon kerja. Jadi, jika diizinkan, dorongan pada cabang check-out akan mengubah
HEAD
tidak konsisten dengan indeks dan pohon kerja pada repositori jarak jauh.Ini akan membuatnya sangat mudah untuk secara tidak sengaja melakukan perubahan yang membatalkan semua perubahan yang didorong dan juga membuatnya sangat sulit untuk membedakan antara setiap perubahan lokal yang belum dilakukan dan perbedaan antara yang baru
HEAD
, indeks dan pohon kerja yang telah disebabkan oleh dorongan bergerakHEAD
.sumber
git remote add box191 <191url>
), atau Anda bisa mendorong dari kotak 191 ke cabang bernama alternatif (misalnyagit push origin master:refs/heads/upload
), lalu ke kotak 192 dan bergabung (misalnyagit merge upload
).git config receive.denyCurrentBranch=updateInstead
: stackoverflow.com/a/28262104/6309 : Anda tidak perlu opsi 2 lagi.Ringkasan
Anda tidak dapat mendorong ke cabang yang dicek dari repositori karena itu akan mengacaukan dengan pengguna repositori tersebut dengan cara yang kemungkinan besar akan berakhir dengan hilangnya data dan riwayat . Tetapi Anda bisa mendorong ke cabang lain dari repositori yang sama.
Karena repositori telanjang tidak pernah memiliki cabang yang diperiksa, Anda selalu dapat mendorong ke cabang repositori telanjang mana pun.
Ada beberapa solusi, tergantung kebutuhan Anda.
Solusi 1: Gunakan Bare Repostiory
Seperti yang disarankan, jika pada satu mesin, Anda tidak memerlukan direktori kerja, Anda dapat pindah ke repositori kosong. Untuk menghindari mengacaukan repositori, Anda bisa mengkloningnya:
Sekarang Anda dapat mendorong semua yang Anda inginkan ke alamat yang sama seperti sebelumnya.
Solusi 2: Dorong ke Cabang yang Tidak Dicentang
Tetapi jika Anda perlu memeriksa kode pada remote Anda
<remote>
, maka Anda dapat menggunakan cabang khusus untuk mendorong. Katakanlah di repositori lokal Anda, Anda telah memanggil remoteorigin
Anda dan Anda berada di master cabang. Maka Anda bisa melakukannyaMaka Anda harus menggabungkannya saat berada di
origin
repo jarak jauh:Otopsi Masalah
Ketika cabang dicentang, komit akan menambahkan komit baru dengan kepala cabang saat ini sebagai induknya dan memindahkan kepala cabang menjadi komit baru itu.
Begitu
menjadi
Tetapi jika seseorang bisa mendorong ke peralihan cabang itu, pengguna akan mendapatkan dirinya sendiri dalam apa yang disebut git mode head terpisah :
Sekarang pengguna tidak lagi di branch1, tanpa diminta secara eksplisit untuk memeriksa cabang lain. Lebih buruk lagi, pengguna sekarang di luar cabang apa pun , dan komit baru apa pun hanya akan menggantung :
Hipotetis, jika pada titik ini, pengguna memeriksa cabang lain, maka komit menggantung ini menjadi permainan yang adil bagi pengumpul sampah Git .
sumber
HEAD
dalam repositori push-to.HEAD
masih akan menunjuk ke cabang, dan cabang pada gilirannya akan menunjuk ke komit baru yang didorong; tetapi direktori kerja dan area indeks / staging tidak akan dimodifikasi. Siapa pun yang bekerja di repositori push-to sekarang harus bekerja keras untuk pulih dari efek push: cari tahu apakah ada perubahan untuk disimpan, dan jika demikian hati-hati mengatur untuk menyimpannya.master
repositori di PC lokal saya. Saya menambahkannyaremotes
ke folder server dan mencoba mendorong repositori saya ke server sehingga pengguna lain dapat menarik / mengambilnya untuk bekerja. Saya mendapatkan kesalahan berikut:! [remote rejected] master -> master (branch is currently checked out)
Bagaimana saya bisa memeriksanya?Anda dapat menyiasati "batasan" ini dengan mengedit
.git/config
pada server tujuan. Tambahkan yang berikut ini untuk memungkinkan repositori git untuk didorong bahkan jika itu "diperiksa":atau
Yang pertama akan memungkinkan dorongan sambil memperingatkan kemungkinan untuk mengacaukan cabang, sedangkan yang kedua hanya diam-diam membiarkannya.
Ini dapat digunakan untuk "menyebarkan" kode ke server yang tidak dimaksudkan untuk diedit. Ini bukan pendekatan terbaik, tetapi pendekatan cepat untuk menyebarkan kode.
sumber
cd .. && git reset --hard
kait pasca-terima untuk digunakan. Meretas, tetapi berhasil.git config receive.denyCurrentBranch warn
git config --local receive.denyCurrentBranch updateInstead
https://github.com/git/git/blob/v2.3.0/Documentation/config.txt#L2155
Gunakan itu di repositori server, dan itu juga memperbarui pohon kerja jika tidak ada timpa yang tidak terlacak akan terjadi.
Itu ditambahkan di Git 2.3 seperti yang disebutkan oleh VonC dalam komentar.
Saya telah mengkompilasi Git 2.3 dan mencobanya. Penggunaan sampel:
Keluaran:
Yay,
b
didorong!sumber
--bare
klon tradisional saya pikir:--force
diperlukan untuk mendorong, dan itu akan membuat Anda "kehilangan" melakukan pada remote.Saya suka gagasan masih memiliki repositori yang dapat digunakan di kotak remote, tetapi alih-alih cabang dummy, saya suka menggunakan:
Ini tampaknya menjadi fitur yang sangat baru dari Git - Saya menggunakan git versi 1.7.7.4.
sumber
git checkout master
untuk kembali ke cabang utama. Baru saat itulah perubahan Anda diterapkan.Saya memiliki masalah yang sama. Bagi saya, saya menggunakan Git push untuk memindahkan kode ke server saya. Saya tidak pernah mengubah kode di sisi server, jadi ini aman.
Di repositori, Anda mendorong untuk mengetik:
Ini akan memungkinkan Anda untuk mengubah repositori saat itu adalah copy yang berfungsi.
Setelah Anda menjalankan Git push, buka mesin jarak jauh dan ketik ini:
Ini akan membuat perubahan yang Anda dorong tercermin dalam copy pekerjaan mesin jarak jauh.
Harap dicatat, ini tidak selalu aman jika Anda membuat perubahan pada copy pekerjaan yang Anda dorong.
sumber
denyCurrentBranch
dan letakkangit checkout -f
di dalamhooks
folder seperti @ jack-senechal yang diposting di siniAnda dapat membuat ulang repositori server Anda dan mendorong dari master cabang lokal Anda ke master server.
Di server jauh Anda:
OKE, dari cabang lokal Anda:
sumber
Apa yang mungkin Anda lakukan untuk menyebabkan ini:
Hal semacam ini terjadi ketika Anda pergi untuk menggedor program kecil. Anda akan mengubah sesuatu yang sudah berfungsi, jadi Anda merapalkan mantra tingkat-3 yang tidak dapat dibatalkan selamanya:
dan Anda mulai menambahkan / melakukan. Tapi kemudian , proyek mulai lebih terlibat dan Anda ingin mengerjakannya dari komputer lain (seperti PC atau laptop di rumah), jadi Anda melakukan sesuatu seperti
dan itu klon dan semuanya terlihat bagus, dan Anda bekerja pada kode Anda dari machine2.
Kemudian ... Anda mencoba untuk mendorong komit Anda dari machine2, dan Anda mendapatkan pesan peringatan di judul.
Alasan untuk pesan ini adalah karena repo git yang Anda gunakan agaknya dimaksudkan untuk digunakan hanya untuk folder itu di machine1. Anda dapat mengkloningnya dengan baik, tetapi mendorong dapat menyebabkan masalah. Cara "tepat" untuk mengelola kode di dua lokasi berbeda adalah dengan repo "kosong", seperti yang disarankan. Repo telanjang tidak dirancang untuk melakukan pekerjaan apa pun di dalamnya, ini dimaksudkan untuk mengoordinasikan komitmen dari berbagai sumber. Inilah mengapa jawaban berperingkat teratas menyarankan menghapus semua file / folder selain dari folder .git setelah Anda
git config --bool core.bare true
.Mengklarifikasi jawaban teratas: Banyak komentar untuk jawaban itu mengatakan sesuatu seperti "Saya tidak menghapus file non-.git dari machine1 dan saya masih dapat melakukan dari machine2". Betul. Namun, file-file lain sepenuhnya "bercerai" dari git repo, sekarang. Coba
git status
di sana dan Anda akan melihat sesuatu seperti "fatal: Operasi ini harus dijalankan di pohon kerja". Jadi, saran untuk menghapus file tidak agar komit dari machine2 akan bekerja ; itu agar Anda tidak bingung dan berpikir bahwa git masih melacak file-file itu. Tetapi, menghapus file adalah masalah jika Anda masih ingin mengerjakan file pada machine1, bukan?Jadi, apa yang harus Anda lakukan?
Tergantung pada seberapa banyak Anda berencana untuk masih bekerja pada machine1 dan machine2 ...
Jika Anda selesai mengembangkan dari machine1 dan telah memindahkan semua pengembangan Anda ke machine2 ... lakukan saja apa yang disarankan oleh jawaban teratas:
git config --bool core.bare true
dan kemudian, secara opsional, hapus semua file / folder selain .git dari folder itu, karena mereka Sedang tidak terlacak dan kemungkinan menyebabkan kebingungan.Jika pekerjaan Anda pada machine2 hanya satu kali, dan Anda tidak perlu melanjutkan pengembangan di sana ... maka jangan repot-repot membuat repo telanjang; hanya ftp / rsync / scp / etc. file Anda dari mesin * 2 * di atas file di mesin * 1 *, komit / dorong dari mesin * 1 *, dan kemudian hapus file dari mesin * 2 *. Yang lain menyarankan untuk membuat cabang, tapi saya pikir itu sedikit berantakan jika Anda hanya ingin menggabungkan beberapa pengembangan yang Anda lakukan satu kali dari komputer lain.
Jika Anda perlu melanjutkan pengembangan pada machine1 dan machine2 ... maka Anda perlu mengatur semuanya dengan benar. Anda perlu mengubah repo Anda menjadi telanjang, maka Anda harus membuat kloning itu pada machine1 agar Anda dapat bekerja . Mungkin cara tercepat untuk melakukan ini adalah dengan melakukan
Sangat penting: karena Anda telah memindahkan lokasi repo dari proj1 ke proj1.git, Anda perlu memperbarui ini dalam file .git / config pada machine2 . Setelah itu, Anda dapat melakukan perubahan dari mesin2. Terakhir, saya mencoba untuk menyimpan repo kosong saya di lokasi pusat, jauh dari pohon kerja saya (yaitu jangan meletakkan 'proj1.git' dalam folder induk yang sama dengan 'proj1'). Saya menyarankan Anda untuk melakukan hal yang sama, tetapi saya ingin menjaga langkah-langkah di atas sesederhana mungkin.
sumber
Dengan beberapa langkah pengaturan Anda dapat dengan mudah menyebarkan perubahan ke situs web Anda menggunakan one-liner like
Yang bagus dan sederhana, dan Anda tidak perlu masuk ke server jauh dan melakukan tarik atau apa pun. Perhatikan bahwa ini akan bekerja paling baik jika Anda tidak menggunakan checkout produksi Anda sebagai cabang kerja! (OP bekerja dalam konteks yang sedikit berbeda, dan saya pikir solusi @Robert Gould mengatasinya dengan baik. Solusi ini lebih tepat untuk ditempatkan ke server jarak jauh.)
Pertama, Anda perlu mengatur repositori telanjang di suatu tempat di server Anda, di luar webroot Anda.
Kemudian buat file
hooks/post-receive
:Dan buat file tersebut dapat dieksekusi:
Di mesin lokal Anda,
Siap! Sekarang di masa depan Anda dapat menggunakan
git push production
untuk menyebarkan perubahan Anda!Kredit untuk solusi ini masuk ke http://sebduggan.com/blog/deploy-your-website-changes-using-git/ . Lihat di sana untuk penjelasan yang lebih terperinci tentang apa yang terjadi.
sumber
bare
, saya ikuti ini dan bergabung denganhooks
(yang Anda sarankan) dan bekerja dengan sempurna.Anda seharusnya hanya mendorong ke repositori kosong. Repositori kosong adalah repositori yang tidak memiliki cabang yang diperiksa. Jika Anda ingin cd ke direktori repositori telanjang, Anda hanya akan melihat isi direktori .git.
sumber
Anda memiliki 3 opsi
Tarik dan dorong lagi:
Dorong ke cabang yang berbeda:
dan menggabungkannya di remote (baik dengan
git
atau menarik-permintaan )Paksakan (tidak disarankan kecuali Anda dengan sengaja mengubah komit melalui
rebase
):Jika masih ditolak, nonaktifkan
denyCurrentBranch
pada repositori jarak jauh:sumber
Bahkan, mengatur jarak jauh ke cabang yang tidak diperiksa sudah cukup. Setelah Anda memeriksa jarak jauh di cabang lain, Anda bisa mendorong.
sumber
Periksa
.git/config
proyek Anda di tujuan:Jika
core. bare
itu salah, Anda dapat mengaturnya ke true:dan kemudian di push lokal Anda ke jarak jauh:
itu akan berhasil, di remote_repo Anda dapat memeriksa versi git.
dan sekarang Anda tidak dapat menggunakan git di "ruang kerja" Anda:
Anda harus mengatur
bare.bare
kembali ke false.sumber
Saya memiliki masalah yang sama menggunakan Git untuk menyinkronkan repositori di ponsel Android dan laptop saya. Solusi bagi saya adalah melakukan tarikan alih-alih dorongan, seperti yang disarankan @CharlesBailey.
git push origin master
pada repositori Android gagal bagi saya dengan pesan kesalahan yang sama yang didapat @ hap497 karena dorongan untuk checkout non-telanjang dari repositori + copy pekerjaan.git pull droid master
pada repositori laptop dan copy pekerjaan bekerja untuk saya. Tentu saja, Anda sebelumnya harus menjalankan sesuatugit remote add droid /media/KINGSTON4GB/notes_repo/
.sumber
Versi Git yang lebih lama digunakan untuk memungkinkan push ke cabang repositori non-telanjang yang saat ini diperiksa.
Ternyata ini adalah hal yang sangat membingungkan untuk dibiarkan. Jadi mereka menambahkan pesan peringatan yang Anda lihat, yang juga sangat membingungkan.
Jika repositori pertama hanya bertindak sebagai server, maka konversikan ke repositori kosong sebagai jawaban lain merekomendasikan dan dilakukan dengan itu.
Namun, jika Anda perlu memiliki cabang bersama antara dua repo yang keduanya digunakan Anda dapat mencapainya dengan pengaturan berikut
Repo1 - akan bertindak sebagai server dan juga digunakan untuk pengembangan
Repo2 - hanya untuk pengembangan
Atur Repo1 sebagai berikut
Buat cabang untuk berbagi pekerjaan.
Agar aman, Anda juga harus membuat $ (REPO) .git / hooks / update yang menolak perubahan apa pun selain shared_branch, karena Anda tidak ingin orang-orang mucking dengan cabang pribadi Anda.
Sekarang buat cabang lokal di repo1 di mana Anda akan melakukan pekerjaan Anda yang sebenarnya.
(mungkin perlu
git config --global push.default upstream
untukgit push
bekerja)Sekarang Anda dapat membuat repo2 dengan
Pada titik ini Anda memiliki pengaturan repo1 dan repo2 untuk bekerja pada cabang lokal yang mendorong dan menarik dari
shared_branch
dalam repo1, tanpa perlu khawatir tentang pesan kesalahan itu atau membuat direktori kerja keluar dari sinkronisasi di repo1. Apa pun alur kerja normal yang Anda gunakan harus berhasil.sumber
OK, jika Anda menginginkan repositori jarak jauh yang normal, lalu buat cabang tambahan dan periksa. Dorong ke dalam satu cabang (yang tidak dicentang) dan gabungkan dengan satu cabang yang saat ini aktif setelah mendorong dari lokal.
Misalnya, pada server jarak jauh:
Pada pengaturan lokal:
Di server jarak jauh:
sumber
Berikut adalah satu tes yang dapat Anda lakukan untuk melihat cara kerja
bare
server:Bayangkan Anda memiliki workstation dan server dengan situs live yang dihosting di dalamnya, dan Anda ingin memperbarui situs ini dari waktu ke waktu (ini juga berlaku untuk situasi di mana dua pengembang mengirim pekerjaan mereka bolak-balik melalui perantara telanjang).
Inisialisasi
Buat beberapa direktori di komputer lokal Anda dan
cd
masuk ke dalamnya, kemudian jalankan perintah-perintah ini:server
direktori (perhatikan. Git di akhir). Direktori ini akan berfungsi sebagai wadah untuk file repositori Anda saja.content
direktori yang . Ini adalah direktori live / produksi Anda yang akan dilayani oleh perangkat lunak server Anda.Alur kerja
Sekarang di sini adalah alur kerja dasar:
Masukkan
local
direktori, buat beberapa file dan komit. Akhirnya dorong mereka ke server:Sekarang masukkan
content
direktori dan perbarui konten server:Ulangi 1-2. Di sini
content
mungkin ada pengembang lain yang bisa mendorong ke server juga, danlocal
karena Anda mungkin menarik darinya.sumber
Menggunakan ini untuk mendorongnya ke cabang hulu terpencil memecahkan masalah ini untuk saya:
Remote tidak memiliki akses ke repo hulu jadi ini adalah cara yang baik untuk mendapatkan perubahan terbaru ke remote itu
sumber
git push <remote> master:newbranch
. Idenya adalah bahwa Anda mendorong cabang baru ke remote, yang kemudian dapat digabungkan. Dengan cara ini Anda menghindari salah satu masalah inkonsistensi yang disebutkan dalam pesan kesalahan.Saya harus menjalankan kembali
git --init
di repositori telanjang yang ada, dan ini telah membuat.git
direktori di dalam pohon repositori telanjang - saya menyadari bahwa setelah mengetik digit status
sana. Saya menghapus itu dan semuanya baik-baik saja lagi :)(Semua jawaban ini bagus, tetapi dalam kasus saya itu adalah sesuatu yang sangat berbeda (sejauh yang saya bisa lihat), seperti yang dijelaskan.)
sumber
Saya yakin sebagian besar orang yang melihat pertanyaan ini akan berhenti pada dua jawaban besar pertama, tetapi saya masih ingin menawarkan solusi saya.
Saya memiliki pengaturan proyek web Eclipse + EGit ketika menemukan kesalahan yang dijelaskan. Apa yang membantu saya hanyalah menggunakan aplikasi GitHub, yang tampaknya secara ajaib menyelesaikan masalah ini. Meskipun EGit akan selalu menolak dorongan, aplikasi desktop GitHub hanya akan mengangkat bahu dan mendorong perubahan saya. Mungkin itu menangani situasi multi-login lebih anggun.
sumber
Artikel yang saya temukan yang mungkin bermanfaat bagi orang lain adalah Git dalam 5 menit .
Saya memiliki proyek Xcode di bawah kontrol versi Git yang ingin saya dorong ke Virtual Distributed Ethernet (VDE) yang saya miliki di DC. VDE menjalankan Centos 5.
Tak satu pun dari artikel yang saya baca tentang Git berbicara tentang repositori telanjang. Semuanya terdengar sangat sederhana sampai saya mencoba apa yang saya pikir seharusnya mudah berasal dari latar belakang SVN .
Saran di sini untuk membuat repositori jarak jauh kosong bekerja. Yang lebih baik untuk persyaratan saya adalah mengkloning proyek Xcode
projectname.git
, menyalinnya ke server jauh; kemudian mendorong bekerja secara ajaib. Langkah selanjutnya akan mendapatkan Xcode untuk mendorong tanpa kesalahan tentang komit, tetapi untuk sekarang saya baik-baik saja melakukannya dari Terminal.Begitu:
Untuk mendorong perubahan dari proyek Xcode Anda setelah Anda berkomitmen dalam Xcode:
Saya yakin ada cara yang lebih lancar untuk melakukan hal di atas, tetapi setidaknya ini berfungsi. Agar semuanya jelas, berikut adalah beberapa klarifikasi:
/xcode-project-directory
adalah direktori tempat proyek xcode Anda disimpan. Mungkin saja/Users/Your_Name/Documents/Project_Name
. projectname secara harfiah adalah nama proyek, tetapi bisa apa saja yang Anda inginkan untuk menyebutnya. Git tidak peduli, kamu akan.Untuk menggunakan scp, Anda harus memiliki akun pengguna di server jauh yang memungkinkan akses SSH . Siapa pun yang menjalankan server mereka sendiri akan memiliki ini. Jika Anda menggunakan hosting bersama atau sejenisnya, Anda mungkin kurang beruntung.
remotehost.com
adalah nama host jarak jauh Anda. Anda dapat dengan mudah menggunakan alamat IP-nya. Hanya untuk kejelasan lebih lanjut, saya menggunakan Gitosis pada host jarak jauh dengan kunci SSH, jadi saya tidak dimintai kata sandi saat saya mendorong. Artikel Hosting Repositori Git, Cara Mudah (dan Aman) memberi tahu Anda cara mengatur semua itu.sumber
Cara terbaik untuk melakukan ini adalah:
Ini akan mengkloning repositori, tetapi tidak akan membuat salinan yang berfungsi di
.../remote
. Jika Anda melihat remote, Anda akan melihat satu direktori dibuat, disebutcurrentrepo.git
, yang mungkin adalah yang Anda inginkan.Kemudian dari repositori Git lokal Anda:
Setelah Anda melakukan perubahan, Anda dapat:
sumber
Saya baru saja mengalami masalah ini dengan repositori git deployment pada Heroku .
Saya tidak tahu mengapa Heroku memiliki repositori non-telanjang di pihak mereka, tetapi sebagai solusi saya bisa mengatur ulang repositori jarak jauh, dan mengunggah ulang.
Anda tidak boleh menggunakan salinan repositori Heroku sebagai satu-satunya repositori git Anda untuk kolaborasi, tetapi untuk berjaga-jaga, saya akan mengatakan dengan jelas: Jangan lakukan ini kecuali Anda yakin Anda memiliki salinan lengkap dari repositori Anda yang disimpan dengan aman di tempat lain selain Heroku. Melakukan reset akan menghapus konten repositori.
Untuk mengatur ulang:
Instal plugin heroku-repo jika Anda belum melakukannya.
Lakukan reset, yang menghapus repositori dan membuat repositori baru yang kosong
Dorong ke remote Heroku Anda seperti biasanya; itu akan memuat ulang semuanya.
sumber
heroku plugins:install https://github.com/heroku/heroku-repo.git
Anda perlu mengubah file konfigurasi pada server jauh setelah Anda membuat repositori kosong (kosong), katakanlah
di sana kamu akan melihat
Anda akan membuat ini menjadi false to true dan saya menghapus logallrefupdates = true (tidak yakin penggunaannya!)
untuk
Anda dapat menguji mengikuti
Cabang KEPALA ini: (tidak diketahui) akan ditampilkan jika Anda tidak dapat PUSH. Jadi jika cabang KEPALA tidak tahu, Anda harus mengubah telanjang menjadi benar dan setelah push berhasil Anda dapat menggunakan kembali
dan kamu akan lihat
sumber
Bagi saya solusi yang bekerja adalah:
ON REMOTE:
TENTANG LOKAL:
ON REMOTE:
Tapi ini bukan solusi nyata, itu hanya solusi.
sumber
Hanya untuk berjaga-jaga jika ada yang merasa berguna. Bagi saya itu adalah masalah izin server git. Saya memeriksa proyek dari awal dan mendorong file sederhana dan kemudian saya mendapat "Dorong ditolak: Dorong ke asal / master ditolak"
sumber
Dengan Git, dua repositori biasa (non-telanjang) tidak dapat mendorong / menarik file bolak-balik secara langsung. Harus ada repositori telanjang perantara. Rupanya, itu seperti pasangan menikah yang memiliki anak, dan pasangan ini bercerai. Orang tua tidak akan berbicara satu sama lain, tetapi mereka akan berkomunikasi melalui anak itu.
Jadi, Anda memiliki satu repositori, Anda mengkloning repositori ini ke repositori kosong, dan kemudian Anda mengkloning ke repositori ketiga. Yang pertama dan yang ketiga dapat bertukar informasi melalui repositori kedua, yang telanjang. Saya kira ini masuk akal, karena Anda tidak ingin seseorang dapat memeriksa barang-barang ke dalam repositori Anda tanpa persetujuan Anda, karena itu dapat menyebabkan penggabungan konflik & sejenisnya.
Jadi, ini sebuah contoh:
Di PC, di ~ / workspace
Di laptop, di ~ / workspace (jangan lakukan git init, dll.)
// Lalu lakukan berbagai komitmen, dan dorong mereka:
Kemudian kembali di PC, di ~ / workspace
// Lalu lakukan berbagai komitmen, dan dorong mereka:
Di laptop git pull
Dan seterusnya..
Berikut ini adalah contoh nyata yang mutlak pada satu mesin, disalin langsung dari jendela perintah, sehingga kita akan tahu bahwa tidak ada langkah yang ditinggalkan, bahwa itu benar-benar berhasil, dll:
sumber
Solusi saya (sedang digunakan)
bingo
sumber