Bagaimana cara saya melakukan push awal ke repositori jarak jauh dengan Git?

173

Saya telah membaca tutorial yang tak terhitung jumlahnya dan saya terus berdiskusi. Inilah yang saya punya:

- Saya menjalankan RubyMine di desktop Windows saya
- Saya telah menginstal Git di akun hosting WebFaction saya sesuai instruksi mereka
- Git tampaknya berfungsi dengan baik di kedua mesin

Inilah yang saya lakukan:
1. Di server:
         a. proyek mkdir
         b. git init
         c. git add.
         d. git commit <--- "nothing to commit"
2. Pada klien:
         a. Buat proyek baru di RubyMine.
         b. "git init" di direktori teratas proyek
         c. "Dorong perubahan" ke server <---- "gagal mendorong beberapa referensi ke ...".

Langkah apa yang saya lewatkan?

Donald Hughes
sumber

Jawaban:

393

Di server:

mkdir my_project.git
cd my_project.git
git --bare init

Pada klien:

mkdir my_project
cd my_project
touch .gitignore
git init
git add .
git commit -m "Initial commit"
git remote add origin [email protected]:/path/to/my_project.git
git push origin master

Perhatikan bahwa saat Anda menambahkan asal, ada beberapa format dan skema yang bisa Anda gunakan. Saya sarankan Anda melihat apa yang disediakan layanan hosting Anda.

Josh Lindsey
sumber
Satu-satunya hal yang saya ubah, karena saya sedang mengerjakan RubyMine, adalah saya mengganti touch .gitignore dengan membuat proyek rails dengan 66 file defaultnya. Terima kasih banyak!
Donald Hughes
Kudos untuk daftar perintah. Ini adalah bagaimana saya mengatur repositori jarak jauh juga.
Dave Bacher
5
Saya harus menambahkan bahwa jika Anda ingin orang lain berkolaborasi dengan Anda dalam repo ini, Anda harus menambahkan --shareddi akhir git --bare initperintah. Ini akan mengatur izin yang diperlukan.
Josh Lindsey
Terima kasih atas jawaban ini. Sangat membantu untuk memiliki hal-hal seperti ini yang mengisi hal-hal yang hilang dalam buku-buku git yang sangat bagus, tetapi masih belum mencakup banyak karya konversi dari CVS.
octopusgrabbus
21
Saya suka lari git push --set-upstream origin masterbukan git push origin masteryang pertama kali. Ini memungkinkan saya untuk mengetik git pushatau git pullbukan git push origin mastersetiap waktu. Apa pun yang sesuai dengan preferensi Anda.
Rick Smith
8

Anda dapat mencoba ini:

di Server:

menambahkan grup baru untuk /etc/groupdisukai (contoh)

mygroup:1001:michael,nir

buat repositori git baru:

mkdir /srv/git
cd /srv/git
mkdir project_dir
cd project_dir
git --bare init (initial git repository )
chgrp -R mygroup objects/ refs/ (change owner of directory )
chmod -R g+w objects/ refs/ (give permission write)

pada Klien:

mkdir my_project
cd my_project
touch .gitignore
git init
git add .
git commit -m "Initial commit"
git remote add origin [email protected]:/path/to/my_project.git
git push origin master

(Terima kasih Josh Lindsey untuk sisi klien)

setelah Klien, lakukan di Server perintah ini:

cd /srv/git/project_dir
chmod -R g+w objects/ refs/

Jika mendapat kesalahan ini setelah git pull:

There is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details

git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:

git branch --set-upstream new origin/<branch>

mencoba:

git push -u origin master

Itu akan membantu.

Michael
sumber
5

Anda harus menambahkan setidaknya satu file ke repositori sebelum melakukan, mis .gitignore.

Benjamin Wohlwend
sumber
Saya kira cara saya mencoba menggunakannya adalah dengan menambahkan file awalnya dari klien saya, karena di situlah saya menulis kode. Apakah itu secara konseptual tidak pada tempatnya di git? Apakah saya harus melakukan komitmen pada klien terlebih dahulu dan kemudian mendorong ke server?
Donald Hughes
5

Jika proyek Anda tidak memiliki cabang upstream, itu adalah jika ini adalah pertama kalinya repositori jarak jauh akan tahu tentang cabang yang dibuat di repositori lokal Anda, perintah berikut ini akan berfungsi.

git push --set-upstream origin <branch-name>
Maria
sumber
3

@ Jos Lindsey sudah menjawab dengan sangat baik. Tetapi saya ingin menambahkan beberapa informasi karena saya sering menggunakan ssh.

Karena itu ubah saja:

git remote add origin [email protected]:/path/to/my_project.git

untuk:

git remote add origin ssh://[email protected]/path/to/my_project

Perhatikan bahwa titik dua antara domain dan jalur sudah tidak ada lagi.

JWo
sumber
1

Anda perlu mengatur repositori jarak jauh pada klien Anda:

git remote add origin ssh://myserver.com/path/to/project
Dave Bacher
sumber
Saya menjalankan perintah itu, tetapi "master asal git push" masih menghasilkan "gagal mendorong beberapa referensi". Saya mencoba melakukan "git pull origin master" dan menerima "tidak dapat menemukan master ref jarak jauh".
Donald Hughes
Saya tidak yakin apakah itu membuat perbedaan, tetapi repositori jarak jauh saya dibuat dengan git --bare initseperti yang direkomendasikan oleh @Josh Lindsey.
Dave Bacher
saya memiliki masalah yang sama "gagal mendorong beberapa referensi" ... mencoba mendorong cabang master dari repo ke yang saya buat ... maka saya perhatikan sumbernya tidak memiliki cabang master - pastikan cabang yang Anda coba untuk mendorong ada :)
Datum Geek