1. Pandhuan rinci kanggo Git kanggo pamula

Dina iki kita bakal ngomong babagan sistem kontrol versi, yaiku Git.

Sampeyan pancene ora bisa dadi programmer lengkap tanpa ngerti lan ngerti alat iki. Mesthi wae, sampeyan ora kudu nyimpen kabeh prentah lan fitur Git ing sirah supaya bisa digunakake kanthi terus-terusan. Sampeyan kudu ngerti sakumpulan prentah sing bakal mbantu sampeyan ngerti kabeh sing kedadeyan.

Dasar Git

Git minangka sistem kontrol versi sing disebarake kanggo kode kita. Apa sebabe kita butuh? Tim mbutuhake sawetara sistem kanggo ngatur karyane. Perlu kanggo nglacak owah-owahan sing kedadeyan saka wektu.

Sing, kita kudu bisa ndeleng langkah-langkah dening-file sing wis diganti lan carane. Iki penting banget nalika sampeyan nyelidiki apa sing diganti ing konteks tugas siji, saengga bisa mbalekake owah-owahan kasebut.

Ayo mbayangno kahanan ing ngisor iki: kita duwe kode kerja, kabeh sing ana ing kono apik, nanging banjur kita mutusake kanggo nambah utawa ngapiki. Ora ana masalah, nanging "perbaikan" kita nyuwil setengah saka fitur program lan ora bisa digunakake. Dadi saiki apa? Tanpa Git, sampeyan kudu njagong lan mikir nganti pirang-pirang jam, nyoba ngeling-eling kepiye asline. Nanging karo Git, kita mung mbatalake komit - lan mung.

Utawa apa yen ana rong pangembang sing nggawe owah-owahan kode dhewe ing wektu sing padha? Tanpa Git, dheweke nyalin file kode asli lan ngowahi kanthi kapisah. Ana wektu nalika loro-lorone pengin nambah owah-owahan menyang direktori utama. Apa sing sampeyan tindakake ing kasus iki?

Ora bakal ana masalah kasebut yen sampeyan nggunakake Git.

Nginstal Git

Ayo nginstal Java ing komputer Proses iki rada beda kanggo sistem operasi sing beda.

Nginstal ing Windows

Kaya biasane, sampeyan kudu ndownload lan mbukak file exe. Kabeh iku prasaja ing kene: klik ing link Google pisanan , nindakake instalasi, lan iku. Kanggo nindakake iki, kita bakal nggunakake konsol bash sing diwenehake dening Windows.

Ing Windows, sampeyan kudu mbukak Git Bash. Mangkene carane katon ing Menu Mulai:

Saiki iki minangka command prompt sing bisa digunakake.

Supaya ora kudu pindhah menyang folder karo proyek saben wektu supaya bisa mbukak Git ing kana, sampeyan bisa mbukak command prompt ing folder proyek kanthi tombol mouse tengen kanthi path sing dibutuhake:

Nginstal ing Linux

Biasane Git minangka bagean saka distribusi Linux lan wis diinstal, amarga iki minangka alat sing asline ditulis kanggo pangembangan kernel Linux. Nanging ana kahanan nalika ora. Kanggo mriksa, sampeyan kudu mbukak terminal lan nulis: git --version. Yen sampeyan entuk jawaban sing bisa dingerteni, mula ora ana sing kudu diinstal.

Mbukak terminal lan nginstal. Kanggo Ubuntu, sampeyan kudu nulis: sudo apt-get install git. Lan iki: saiki sampeyan bisa nggunakake Git ing terminal apa wae.

Nginstal ing macOS

Ing kene uga, sampeyan kudu mriksa dhisik apa Git wis ana (ndeleng ndhuwur, padha karo Linux).

Yen sampeyan ora duwe, banjur cara paling gampang kanggo njaluk iku kanggo ngundhuh versi paling anyar . Yen Xcode wis diinstal, banjur Git mesthi bakal diinstal kanthi otomatis.

Setelan Git

Git nduweni setelan pangguna kanggo pangguna sing bakal ngirim karya. Iki masuk akal lan perlu, amarga Git njupuk informasi iki kanggo kolom Pengarang nalika komitmen digawe.

Nggawe jeneng pangguna lan sandhi kanggo kabeh proyek sampeyan kanthi nggunakake printah ing ngisor iki:

git config --user.name global "Ivan Ivanov" git config --user global.email ivan.ivanov@gmail.com

Yen sampeyan kudu ngganti penulis kanggo proyek tartamtu (kanggo proyek pribadi, contone), sampeyan bisa mbusak "--global". Iki bakal menehi kita ing ngisor iki:

git config user.name "Ivan Ivanov" git config user.email ivan.ivanov@gmail.com

A dicokot saka teori

Kanggo nyilem menyang topik, kita kudu ngenalake sampeyan sawetara tembung lan tumindak anyar ... Yen ora, ora bakal ana sing bisa diomongake. Mesthi, iki minangka jargon sing teka saka basa Inggris, mula aku bakal nambah terjemahan ing kurung.

Apa tembung lan tumindak?

  • git repositori
  • netepi
  • cabang
  • nggabung
  • konflik
  • narik
  • nyurung
  • carane nglirwakake sawetara file (.giignore)

Lan sateruse.

Status ing Git

Git duwe sawetara patung sing kudu dimangerteni lan dieling-eling:

  • ora dilacak
  • diowahi
  • dipentasake
  • setya

Carane sampeyan kudu ngerti iki?

Iki minangka status sing ditrapake kanggo file sing ngemot kode kita. Ing tembung liyane, siklus urip biasane katon kaya iki:

  • Berkas sing digawe nanging durung ditambahake menyang gudang nduweni status "ora dilacak".
  • Nalika kita nggawe owah-owahan menyang file sing wis ditambahake menyang repositori Git, status kasebut "diowahi".
  • Ing antarane file sing wis diganti, kita milih sing dibutuhake (contone, ora perlu kelas sing dikompilasi), lan kelas kasebut diganti dadi status "pentas".
  • Komit digawe saka file sing wis disiapake ing status panggung lan mlebu ing repositori Git. Sawise iku, ora ana file kanthi status "pentas". Nanging bisa uga isih ana file sing statuse "dimodifikasi".

Mangkene tampilane:

Apa komitmen?

A commit minangka acara utama nalika nerangake kontrol versi. Isine kabeh owah-owahan sing digawe wiwit komitmen diwiwiti. Komit disambung bebarengan kaya dhaptar sing disambung.

Khusus, ana komitmen pisanan. Nalika komit kapindho digawe, iku (kapindho) ngerti apa sing teka sawise sing pisanan. Lan kanthi cara iki, informasi bisa dilacak.

Komit uga duwe informasi dhewe, sing diarani metadata:

  • pengenal unik commit, sing bisa digunakake kanggo nemokake
  • jeneng pangarang commit, sing nggawe
  • tanggal commit digawe
  • komentar sing nggambarake apa sing ditindakake sajrone komitmen

Mangkene carane katon:

Apa iku cabang?

Cabang minangka penunjuk kanggo sawetara komitmen. Amarga komit ngerti komit sing ndhisiki, nalika cabang nuduhake komit, kabeh komit sadurunge uga ditrapake.

Dadi, kita bisa ujar manawa sampeyan bisa duwe akeh cabang sing sampeyan pengin nuduhake komitmen sing padha.

Pakaryan kedadeyan ing cabang, mula nalika komit anyar digawe, cabang kasebut mindhah pointer menyang komitmen sing luwih anyar.

Miwiti karo Git

Sampeyan bisa nggarap repositori lokal piyambak uga karo remot.

Kanggo nindakake prentah sing dibutuhake, sampeyan bisa mbatesi dhewe menyang repositori lokal. Iku mung nyimpen kabeh informasi project sacara lokal ing folder .git.

Yen kita ngomong babagan repositori remot, mula kabeh informasi disimpen ing endi wae ing server remot: mung salinan proyek sing disimpen sacara lokal. Owah-owahan sing digawe kanggo salinan lokal sampeyan bisa di-push (git push) menyang repositori remot.

Ing diskusi ing kene lan ing ngisor iki, kita ngomong babagan nggarap Git ing konsol. Mesthi, sampeyan bisa nggunakake sawetara solusi basis GUI (contone, IntelliJ IDEA), nanging pisanan sampeyan kudu ngerti apa printah sing dieksekusi lan apa tegese.

Nggarap Git ing repositori lokal

Kanggo nggawe repositori lokal, sampeyan kudu nulis:

git init

Iki bakal nggawe folder .git sing didhelikake ing direktori console saiki.

Folder .git nyimpen kabeh informasi babagan gudang Git. Aja mbusak;)

Sabanjure, file ditambahake menyang proyek kasebut, lan diwenehi status "Untracked". Kanggo mriksa status karya sampeyan saiki, tulisen iki:

status git

Kita ana ing cabang master, lan ing kene kita bakal tetep nganti pindhah menyang cabang liyane.

Iki nuduhake file endi sing wis diganti nanging durung ditambahake menyang status "pentas". Kanggo nambah menyang status "pentas", sampeyan kudu nulis "git add". Kita duwe sawetara opsi ing kene, contone:

  • git add -A - nambah kabeh file menyang status "staged".
  • git nambah. - tambahake kabeh file saka folder iki lan kabeh subfolder. Ateges padha karo sing sadurunge;
  • git add <file name> - nambah file tartamtu. Ing kene sampeyan bisa nggunakake ekspresi reguler kanggo nambah file miturut sawetara pola. Contone, git add *.java: Iki tegese sampeyan mung pengin nambah file karo ekstensi java.

Rong pilihan pisanan jelas prasaja. Prekara dadi luwih menarik kanthi tambahan paling anyar, mula ayo nulis:

git nambah *.txt

Kanggo mriksa status, kita nggunakake printah sing wis kita kenal:

status git

Ing kene sampeyan bisa ndeleng manawa ekspresi reguler wis bisa digunakake kanthi bener: test_resource.txt saiki duwe status "pentas".

Lan pungkasane, tahap pungkasan kanggo nggarap repositori lokal (ana maneh nalika nggarap repositori remot;)) - nggawe komitmen anyar:

git commit -m "kabeh file txt ditambahake menyang proyek"

Sabanjure yaiku prentah sing apik kanggo ndeleng riwayat komit ing cabang. Ayo kita gunakake:

git log

Ing kene sampeyan bisa ndeleng manawa kita wis nggawe komitmen pertama lan kalebu teks sing diwenehake ing baris perintah. Penting banget kanggo ngerti yen teks iki kudu nerangake kanthi akurat babagan apa sing ditindakake sajrone komitmen iki. Iki bakal mbantu kita kaping pirang-pirang ing mangsa ngarep.

Pembaca sing kepengin weruh sing durung turu bisa uga mikir apa sing kedadeyan ing file GitTest.java. Ayo goleki saiki. Kanggo nindakake iki, kita nggunakake:

status git

Nalika sampeyan bisa ndeleng, iku isih "untracked" lan nunggu ing swiwi. Nanging kepiye yen kita ora pengin nambahake menyang proyek kasebut? Kadhangkala kedadeyan kasebut.

Kanggo nggawe samubarang luwih menarik, ayo saiki nyoba ngganti file test_resource.txt kita. Ayo nambah sawetara teks ing kana lan mriksa status:

status git

Ing kene sampeyan bisa ndeleng kanthi jelas bedane antarane status "ora dilacak" lan "diowahi".

GitTest.java "ora dilacak", nalika test_resource.txt "diowahi".

Saiki kita duwe file ing negara sing diowahi, kita bisa mriksa owah-owahan sing ditindakake. Iki bisa ditindakake kanthi nggunakake printah ing ngisor iki:

bedane git

Yaiku, sampeyan bisa ndeleng kanthi jelas ing kene apa sing ditambahake menyang file teks: hello world!

Ayo nambahake owah-owahan menyang file teks lan nggawe komitmen:

git nambah test_resource.txt
git commit -m "ditambahake tembung hello! kanggo test_resource.txt"

Kanggo ndeleng kabeh commit, tulis:

git log

Kaya sing sampeyan ngerteni, saiki kita duwe rong komitmen.

Kita bakal nambah GitTest.java kanthi cara sing padha. Ora ana komentar ing kene, mung prentah:

git nambah GitTest.java
git commit -m "ditambahake GitTest.java"
status git

Nggarap .giignore

Cetha, kita mung pengin nyimpen kode sumber piyambak, lan ora liya, ing repositori. Dadi apa maneh sing bisa ana? Paling ora, kelas kompilasi lan / utawa file sing digawe dening lingkungan pangembangan.

Kanggo ngandhani Git supaya ora nggatekake, kita kudu nggawe file khusus. Apa iki: nggawe file disebut .gitignore ing ROOT saka project. Saben baris ing berkas iki makili pola kanggo nglirwakake.

Ing conto iki, file .gitignore bakal katon kaya iki:

*
.target kelas/
*.iml
.idea/

Ayo dideleng:

  • Baris pisanan kanggo nglirwakake kabeh file karo extension .class
  • Baris kapindho yaiku nglirwakake folder "target" lan kabeh sing ana
  • Baris katelu kanggo nglirwakake kabeh file karo extension .iml
  • Baris kaping papat kanggo nglirwakake folder .idea

Coba gunakake conto. Kanggo ndeleng cara kerjane, ayo nambah kompilasi GitTest.class menyang proyek lan mriksa status proyek:

status git

Cetha, kita ora pengin ora sengaja nambah kelas sing dikompilasi menyang proyek kasebut (nggunakake git add -A). Kanggo nindakake iki, gawe file .gitignore lan tambahake kabeh sing wis diterangake sadurunge:

Saiki ayo nggunakake komit kanggo nambah file .gitignore menyang proyek:

git nambah .gitignore
git commit -m "ditambahake file .gitignore"

Lan saiki wayahe bebener: kita duwe kelas kompilasi GitTest.class sing "ora dilacak", sing ora pengin ditambahake menyang gudang Git.

Saiki kita kudu ndeleng efek saka file .gitignore:

status git

Sempurno! .gitignore +1 :)

Nggarap cabang

Alamiah, nggarap mung siji cabang ora trep kanggo pangembang dhewekan, lan mokal yen ana luwih saka siji wong ing tim. Mulane kita duwe cabang.

Cabang mung minangka penunjuk sing bisa dipindhah kanggo nindakake.

Ing bagean iki, kita bakal njelajah kerja ing macem-macem cabang: carane nggabungake owah-owahan saka siji cabang menyang cabang liyane, konflik apa sing bisa kedadeyan, lan liya-liyane.

Kanggo ndeleng dhaptar kabeh cabang ing repositori lan ngerti sampeyan ana ing endi, sampeyan kudu nulis:

cabang git -a

Sampeyan bisa ndeleng manawa kita mung duwe siji cabang master. Tanda bintang ing ngarep nuduhake yen kita ana ing kono. Miturut cara, sampeyan uga bisa nggunakake printah "status git" kanggo mangerteni kang cabang kita ing.

Banjur ana sawetara opsi kanggo nggawe cabang (bisa uga ana liyane - iki sing digunakake):

  • nggawe cabang anyar adhedhasar sing ana ing (99% kasus)
  • nggawe cabang adhedhasar komitmen tartamtu (1% kasus)

Ayo nggawe cabang adhedhasar komitmen tartamtu

Kita bakal ngandelake pengenal unik komit. Kanggo nemokake, kita nulis:

git log

Kita wis nyorot komitmen kasebut kanthi komentar "nambahake hello world ..." Pengenal unik yaiku 6c44e53d06228f888f2f454d3cb8c1c976dd73f8. Kita pengin nggawe cabang "pembangunan" sing diwiwiti saka komitmen iki. Kanggo nindakake iki, kita nulis:

git checkout -b pangembangan 6c44e53d06228f888f2f454d3cb8c1c976dd73f8

Cabang digawe kanthi mung loro komit pisanan saka cabang master. Kanggo verifikasi iki, dhisik priksa manawa ngalih menyang cabang sing beda lan ndeleng jumlah komitmen ing kana:

status git
git log

Lan kaya sing dikarepake, kita duwe rong komitmen. Miturut cara, kene titik menarik: durung ana file .gitignore ing cabang iki, supaya file kita kompilasi (GitTest.class) saiki disorot karo status "untracked".

Saiki kita bisa mriksa cabang maneh kanthi nulis iki:

cabang git -a

Sampeyan bisa ndeleng manawa ana rong cabang: "master" lan "pembangunan". We saiki ing pembangunan.

Ayo nggawe cabang adhedhasar sing saiki

Cara liya kanggo nggawe cabang yaiku nggawe saka liyane. Kita pengin nggawe cabang adhedhasar cabang master. Kaping pisanan, kita kudu ngalih menyang, lan langkah sabanjure yaiku nggawe sing anyar. Ayo dideleng:

  • git checkout master - ngalih menyang cabang master
  • git status - verifikasi manawa kita ana ing cabang master

Kene sampeyan bisa ndeleng sing kita ngalih menyang cabang master, file .gitignore ing efek, lan kelas nyawiji ora ana maneh disorot minangka "untracked".

Saiki kita nggawe cabang anyar adhedhasar cabang master:

git checkout -b feature/update-txt-files

Yen sampeyan ora yakin manawa cabang iki padha karo "master", sampeyan bisa mriksa kanthi gampang kanthi nglakokake "git log" lan ndeleng kabeh commit. Mesthine ana papat.

Resolusi konflik

Sadurunge njelajah apa konflik, kita kudu ngomong babagan nggabungake cabang siji menyang cabang liyane.

Gambar iki nggambarake proses nggabungake cabang siji menyang cabang liyane:

Ing kene, kita duwe cabang utama. Ing sawetara titik, cabang sekunder digawe saka cabang utama lan banjur diowahi. Sawise karya rampung, kita kudu nggabungake siji cabang menyang liyane.

Ing conto kita, kita nggawe cabang fitur/update-txt-files. Kaya sing dituduhake kanthi jeneng cabang, kita nganyari teks.

Saiki kita kudu nggawe komitmen anyar kanggo karya iki:

git nambah *.txt
git commit -m "dianyari file txt"
git log

Saiki, yen kita pengin nggabungake cabang fitur/update-txt-files dadi master, kita kudu pindhah menyang master lan nulis "git merge feature/update-txt-files":

git checkout master
git merge feature/update-txt-files
git log

Akibaté, cabang master saiki uga kalebu komit sing ditambahake menyang fitur/update-txt-files.

Fungsi iki ditambahake, supaya sampeyan bisa mbusak cabang fitur. Kanggo nindakake iki, kita nulis:

git branch -D feature/update-txt-files

Ayo dadi rumit kahanan: saiki ayo ngomong yen sampeyan kudu ngganti file txt maneh. Nanging saiki file iki bakal diganti ing cabang master uga. Ing tembung liyane, iku bakal ngganti ing podo karo. Git ora bakal bisa ngerteni apa sing kudu ditindakake nalika kita pengin nggabungake kode anyar menyang cabang master.

Kita bakal nggawe cabang anyar adhedhasar master, nggawe owahan kanggo text_resource.txt, lan nggawe komitmen kanggo karya iki:

git checkout -b fitur / nambah-header

... kita nggawe owahan kanggo file

git nambah *.txt
git commit -m "ditambahake header menyang txt"

Pindhah menyang cabang master lan uga nganyari file teks iki ing baris sing padha kaya ing cabang fitur:

git checkout master

… kita nganyari test_resource.txt

git nambah test_resource.txt
git commit -m "nambahake header master menyang txt"

Lan saiki titik paling menarik: kita kudu nggabung owah-owahan saka fitur / nambah-header cabang kanggo master. Kita ana ing cabang master, mula kita mung kudu nulis:

fitur git merge / add-header

Nanging asil bakal dadi konflik ing file test_resource.txt:

Ing kene kita bisa ndeleng manawa Git ora bisa mutusake dhewe carane nggabungake kode iki. Iki ngandhani yen kita kudu ngrampungake konflik kasebut dhisik, lan banjur nindakake komitmen kasebut.

OK. Kita mbukak file kanthi konflik ing editor teks lan ndeleng:

Kanggo ngerti apa sing ditindakake Git ing kene, kita kudu ngelingi owah-owahan sing ditindakake lan ing ngendi, banjur mbandhingake:

  1. Owah-owahan sing ana ing baris iki ing cabang master ditemokake ing antarane "<<<<<<<< HEAD" lan "=======".
  2. Owah-owahan sing ana ing cabang fitur / add-header ditemokake ing antarane "=======" lan ">>>>>>> fitur / add-header".

Iki carane Git ngandhani yen ora bisa ngerti carane nindakake gabungan ing lokasi iki ing file. Iki dibagi dadi rong bagean saka cabang sing beda-beda lan ngajak kita kanggo ngrampungake konflik gabungan kasebut.

Cukup adil. Aku kanthi kendel arep mbusak kabeh, mung ninggalake tembung "header":

Ayo ndeleng status owah-owahan. Katrangan bakal rada beda. Tinimbang status "diowahi", kita wis "ora digabung". Dadi bisa kita sebutno status kaping lima? Aku ora mikir iki perlu. Ayo ndeleng:

status git

Kita bisa gawe uwong yakin yen iki kasus khusus lan ora biasa. Ayo nerusake:

git nambah *.txt

Sampeyan bisa uga sok dong mirsani yen katrangan kasebut mung nulis "git commit". Ayo coba nulis:

git komit

Lan kaya ngono, kita nindakake - kita ngrampungake konflik ing konsol kasebut.

Mesthi wae, iki bisa ditindakake kanthi luwih gampang ing lingkungan pangembangan terpadu. Contone, ing IntelliJ IDEA, kabeh wis diatur kanthi apik supaya sampeyan bisa nindakake kabeh tumindak sing dibutuhake ing njero. Nanging IDE nindakake akeh perkara "ing hood", lan kita asring ora ngerti apa sing kedadeyan ing kana. Lan nalika ora ana pangerten, masalah bisa muncul.

Nggarap repositori remot

Langkah pungkasan yaiku ngerteni sawetara prentah liyane sing dibutuhake kanggo nggarap repositori remot.

Kaya sing dakkandhakake, repositori remot yaiku sawetara papan ing ngendi repositori disimpen lan saka ngendi sampeyan bisa nggawe kloning.

Apa jenis repositori remot sing ana? Tuladha:

  • GitHub minangka platform panyimpenan paling gedhe kanggo repositori lan pangembangan kolaboratif.
  • GitLab minangka alat basis web kanggo siklus urip DevOps kanthi sumber terbuka. Iku sistem basis Git kanggo ngatur repositori kode karo wiki dhewe, sistem nelusuri bug, CI/CD pipeline, lan fungsi liyane.
  • BitBucket minangka layanan web kanggo hosting proyek lan pangembangan kolaboratif adhedhasar sistem kontrol versi Mercurial lan Git. Ing sawijining wektu, ana kauntungan gedhe tinimbang GitHub amarga nawakake repositori pribadi gratis. Taun kepungkur, GitHub uga ngenalake kemampuan iki kanggo kabeh wong kanthi gratis.
  • Lan sakteruse…

Nalika nggarap repositori remot, sing kudu ditindakake yaiku kloning proyek kasebut menyang repositori lokal sampeyan.

Kanggo iki, kita ngekspor proyek sing digawe sacara lokal Saiki saben wong bisa ngkloning dhewe kanthi nulis:

git clone https://github.com/romankh3/git-demo

Saiki ana salinan lokal lengkap proyek kasebut. Kanggo mesthekake yen salinan lokal proyek kasebut paling anyar, sampeyan kudu narik proyek kasebut kanthi nulis:

git narik

Ing kasus kita, ora ana apa-apa ing repositori remot sing wis diganti saiki, mula jawabane: Wis nganti saiki.

Nanging yen kita nggawe owah-owahan ing repositori remot, sing lokal dianyari sawise ditarik.

Lan pungkasane, perintah pungkasan yaiku push data menyang repositori remot. Yen wis rampung sacara lokal lan pengin dikirim menyang repositori remot, kita kudu nggawe komitmen anyar kanthi lokal. Kanggo nduduhake iki, ayo nambah liyane menyang file teks:

Saiki ana sing umum kanggo kita - kita nggawe komitmen kanggo karya iki:

git nambah test_resource.txt
git commit -m "txt disiapake kanggo push"

Printah kanggo push iki menyang repositori remot yaiku:

git push

Semono wae!

pranala migunani

2. Cara nggarap Git ing IntelliJ IDEA

Ing bagean iki, sampeyan bakal sinau cara nggarap Git ing IntelliJ IDEA.

Input sing dibutuhake:

  1. Waca, tindakake, lan mangertos bagean sadurunge. Iki bakal mbantu mesthekake yen kabeh wis disiyapake lan siap.
  2. Instal IntelliJ IDEA. Kabeh kudu tertib neng kene :)
  3. Alokasi jam kanggo entuk penguasaan lengkap.

Ayo nggarap proyek demo sing digunakake kanggo artikel babagan Git.

Kloning proyek kasebut sacara lokal

Ana rong pilihan ing kene:

  1. Yen sampeyan wis duwe akun GitHub lan pengin push soko mengko, iku luwih apik kanggo garpu proyek lan tiron salinan dhewe. Sampeyan bisa maca babagan carane nggawe garpu ing artikel liyane ing judhul Conto alur kerja forking .
  2. Klone repositori lan nindakake kabeh sacara lokal tanpa kemampuan kanggo push kabeh menyang server.

Kanggo kloning proyek saka GitHub, sampeyan kudu nyalin link proyek lan ngirim menyang IntelliJ IDEA:

  1. Salin alamat proyek:

  2. Bukak IntelliJ IDEA banjur pilih "Entuk saka Kontrol Versi":

  3. Salin lan tempel alamat proyek:

  4. Sampeyan bakal dijaluk nggawe proyek IntelliJ IDEA. Nampa tawaran:

  5. Amarga ora ana sistem mbangun, pilih "Gawe proyek saka sumber sing wis ana":

  6. Sabanjure sampeyan bakal weruh layar apik iki:

Saiki kita ngerti kloning, sampeyan bisa ndeleng.

Sepisanan ing IntelliJ IDEA minangka UI Git

Deleng kanthi luwih rinci babagan proyek kloning: sampeyan wis entuk akeh informasi babagan sistem kontrol versi.

Pisanan, kita duwe panel Kontrol Versi ing pojok kiwa ngisor. Ing kene sampeyan bisa nemokake kabeh owah-owahan lokal lan entuk dhaptar commits (analog karo "git log").

Ayo dadi pindhah menyang diskusi Log. Ana visualisasi tartamtu sing mbantu kita ngerti persis carane pembangunan wis diterusake. Contone, sampeyan bisa ndeleng manawa cabang anyar digawe kanthi header sing ditambahake menyang txt commit, sing banjur digabung menyang cabang master. Yen sampeyan ngeklik komit, sampeyan bisa ndeleng ing pojok tengen kabeh informasi babagan komit: kabeh owah-owahan lan metadata.

Kajaba iku, sampeyan bisa ndeleng owah-owahan nyata. Kita uga weruh yen konflik wis dirampungake ing kana. IDEA uga nampilake iki kanthi apik.

Yen sampeyan ngeklik kaping pindho ing file sing diowahi sajrone komitmen iki, kita bakal weruh kepiye konflik kasebut dirampungake:

Kita nyathet yen ing sisih kiwa lan tengen kita duwe rong versi file sing padha sing kudu digabung dadi siji. Lan ing tengah, kita duwe asil gabungan pungkasan.

Nalika proyek duwe akeh cabang, komitmen, lan pangguna, sampeyan kudu nggoleki kanthi kapisah miturut cabang, pangguna, lan tanggal:

Sadurunge miwiti, iku uga migunani kanggo nerangake carane ngerti kang cabang kita.

Ing pojok tengen ngisor, ana tombol kanthi label "Git: master". Apa wae ing ngisor iki "Git:" minangka cabang saiki. Yen sampeyan ngeklik tombol, sampeyan bisa nindakake akeh perkara sing migunani: ngalih menyang cabang liyane, nggawe sing anyar, ngganti jeneng sing wis ana, lan liya-liyane.

Nggarap repositori

Hotkeys migunani

Kanggo karya ing mangsa ngarep, sampeyan kudu ngelingi sawetara hotkeys sing migunani banget:

  1. CTRL + T - Entuk owah-owahan paling anyar saka repositori remot (git pull).
  2. CTRL + K - Nggawe komitmen / ndeleng kabeh owah-owahan saiki. Iki kalebu file sing ora dilacak lan diowahi (git commit).
  3. CTRL + SHIFT + K - Iki printah kanggo push owah-owahan menyang repositori remot. Kabeh commits digawe sacara lokal lan durung ing repositori remot bakal di-push (git push).
  4. ALT + CTRL + Z - Owah-owahan ing file tartamtu menyang status komit pungkasan sing digawe ing repositori lokal. Yen sampeyan milih kabeh project ing sudhut kiwa ndhuwur, sampeyan bisa muter maneh owah-owahan ing kabeh file.

Apa sing dikarepake?

Kanggo ngrampungake karya, kita kudu nguwasani skenario dhasar sing digunakake ing endi wae.

Tujuane kanggo ngleksanakake fungsi anyar ing cabang sing kapisah lan banjur push menyang repositori remot (banjur sampeyan uga kudu nggawe panjalukan narik menyang cabang utama, nanging iku ngluwihi orane katrangan saka pawulangan iki).

Apa sing dibutuhake kanggo nindakake iki?

  1. Entuk kabeh owah-owahan saiki ing cabang utama (contone, "master").

  2. Saka cabang utama iki, gawe cabang sing kapisah kanggo karya sampeyan.

  3. Ngleksanakake fungsi anyar.

  4. Pindhah menyang cabang utama lan priksa manawa ana owah-owahan anyar nalika kita kerja. Yen ora, banjur kabeh apik. Nanging yen ana owah-owahan, banjur kita nindakake ing ngisor iki: pindhah menyang cabang kerja lan rebase owah-owahan saka cabang utama kanggo kita. Yen kabeh dadi apik, banjur apik. Nanging kabeh bisa uga ana konflik. Kaya sing kedadeyan, mung bisa dirampungake sadurunge, tanpa mbuwang wektu ing repositori remot.

    Apa sampeyan mikir kenapa sampeyan kudu nindakake iki? Krama sing apik lan nyegah konflik kedadeyan sawise nyurung cabang sampeyan menyang gudang lokal (mesthi ana kemungkinan konflik isih bakal kedadeyan, nanging dadi luwih cilik ).

  5. Push owah-owahan menyang repositori remot.

Carane njaluk owah-owahan saka server remot?

Kita nambahake katrangan menyang README kanthi komitmen anyar lan pengin entuk owah-owahan kasebut. Yen owah-owahan digawe ing gudang lokal lan ing remot, mula kita diundang kanggo milih antarane gabungan lan rebase. Kita milih kanggo nggabungake.

Ketik CTRL + T :

Saiki sampeyan bisa ndeleng carane README wis diganti, yaiku owah-owahan saka repositori remot ditarik, lan ing pojok tengen ngisor sampeyan bisa ndeleng kabeh rincian owah-owahan sing teka saka server.

Nggawe cabang anyar adhedhasar master

Kabeh iku prasaja ing kene.

Menyang pojok tengen ngisor lan klik Git: master . Pilih + Cabang Anyar .

Ninggalake kothak mriksa cabang Checkout dipilih lan ketik jeneng cabang anyar. Ing kasus kita: iki bakal dadi readme-improver .

Git: master banjur bakal ngganti Git: readme-improver .

Ayo simulasi karya paralel

Kanggo konflik katon, wong kudu nggawe.

Kita bakal nyunting README kanthi komitmen anyar liwat browser, saéngga simulasi karya paralel. Kaya-kaya ana wong sing nggawe owah-owahan ing file sing padha nalika kita nggarap. Akibaté bakal dadi konflik. Kita bakal mbusak tembung "fully" saka baris 10.

Ngleksanakake fungsi kita

Tugas kita yaiku ngganti README lan nambah katrangan menyang artikel anyar. Yaiku, karya ing Git ngliwati IntelliJ IDEA. Tambah iki:

Owah-owahan wis rampung. Saiki kita bisa nggawe komitmen. Pencet CTRL + K , sing menehi kita:

Sadurunge nggawe komitmen, kita kudu ndeleng kanthi cetha apa sing ditawakake jendhela iki.

Ing bagean Pesen Komit , kita nulis teks sing ana gandhengane karo komitmen kasebut. Banjur kanggo nggawe, kita kudu ngeklik Komit .

Kita nulis manawa README wis diganti lan nggawe komit. Tandha muncul ing pojok kiwa ngisor kanthi jeneng komit:

Priksa manawa cabang utama wis diganti

Kita ngrampungake tugas kita. Kerjane. Kita nulis tes. Kabeh apik. Nanging sadurunge push menyang server, kita isih kudu mriksa apa ana owah-owahan ing cabang utama ing sauntara. Kepiye carane bisa kedadeyan? Gampang banget: ana sing nampa tugas sawise sampeyan, lan ana sing ngrampungake tugas kasebut luwih cepet tinimbang sampeyan ngrampungake tugas sampeyan.

Dadi kita kudu pindhah menyang cabang master. Kanggo nindakake iki, kita kudu nindakake apa sing ditampilake ing pojok tengen ngisor ing gambar ing ngisor iki:

Ing cabang master, pencet CTRL + T kanggo entuk owah-owahan paling anyar saka server remot. Nggoleki owah-owahan, sampeyan bisa kanthi gampang ndeleng apa sing kedadeyan:

Tembung "fully" wis dibusak. Mungkin wong saka marketing mutusake manawa ora kudu ditulis kaya ngono lan menehi tugas para pangembang kanggo nganyari.

Saiki kita duwe salinan lokal saka versi paling anyar saka cabang master. Bali menyang readme-improver .

Saiki kita kudu rebase pangowahan saka cabang master kanggo kita. Kita nindakake iki:

Yen sampeyan nindakake kabeh kanthi bener lan ngetutake aku, asil kasebut kudu nuduhake konflik ing file README:

Ing kene kita uga duwe akeh informasi sing kudu dingerteni lan dicekel. Dituduhake ing kene yaiku dhaptar file (ing kasus kita, siji file) sing duwe konflik. Kita bisa milih saka telung opsi:

  1. nampa sampeyan - mung nampa owah-owahan saka readme-improver.
  2. nampa duweke - mung nampa owah-owahan saka master.
  3. gabung - pilih dhewe apa sing pengin disimpen lan apa sing kudu dibuwang.

Ora jelas apa sing diganti. Yen ana owah-owahan minangka cabang master, mesthine kudu ana, mula kita ora bisa nampa owah-owahan kita. Dadi, kita milih gabungan :

Ing kene kita bisa ndeleng manawa ana telung bagean:

  1. Iki minangka owah-owahan saka readme-improver.
  2. Hasil gabungan. Saiki, iku wis ana sadurunge owah-owahan.
  3. Owah-owahan saka cabang master.

Kita kudu ngasilake asil gabungan sing bakal gawe marem kabeh wong. Nliti apa sing diganti sadurunge owah-owahan, kita ngerti yen dheweke mung ngilangi tembung "fully". Oke, ora masalah! Tegese kita uga bakal mbusak ing asil gabungan banjur nambah owah-owahan kita. Sawise kita mbenerake asil gabungan, kita bisa klik Apply .

Banjur kabar bakal muncul, ngandhani yen rebase wis sukses:

ana! Kita ngrampungake konflik pisanan liwat IntelliJ IDEA.

Push owah-owahan menyang server remot

Langkah sabanjure kanggo push owahan menyang server remot lan nggawe panjalukan narik. Kanggo nindakake iki, mung pencet CTRL + SHIFT + K . Banjur kita entuk:

Ing sisih kiwa, bakal ana dhaptar commit sing durung di-push menyang repositori remot. Ing sisih tengen bakal kabeh file sing wis diganti. Lan iku! Pencet Push lan sampeyan bakal nemu rasa seneng :)

Yen push sukses, sampeyan bakal weruh kabar kaya iki ing pojok tengen ngisor:

Bonus: nggawe panjalukan narik

Ayo menyang repositori GitHub lan kita weruh manawa GitHub wis ngerti apa sing dikarepake:

Klik Compare & pull request . Banjur klik Gawe panjalukan tarik . Amarga konflik kasebut wis rampung sadurunge, saiki nalika nggawe panjaluk tarik, kita bisa langsung nggabungake:

Semono wae!