[ English | Indonesia | 한국어 (대한민국) | español (México) | English (United Kingdom) | Deutsch | 中文 (简体, 中国) ]

Tutorial: Developing Changes In A Series

Tutorial ini membahas skenario sederhana untuk mengembangkan beberapa set perubahan dalam seri di branch yang sama. Jika Anda mau, Anda bisa mengikuti, menggunakan sandbox repository <https://opendev.org/opendev/sandbox/> _, menjalankan perintah persis seperti yang mereka buat.

Jika Anda seorang pembelajar visual, Anda dapat memilih video ini <https://www.youtube.com/watch?v=mHyvP7zp4Ko&list=PLR97FKPZ-mD9XJCfwDE5c-td9lZGIPfS5&index=4> _ yang melakukan hal yang hampir sama (tetapi tanpa git-restack))

Kita mulai.

Mulai dari cabang master freshly-pulled:

efried:~/openstack/sandbox$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
efried:~/openstack/sandbox$ git pull --all
<snip>

Saat Anda mengerjakan blueprint, Anda ingin memberi nama cabang lokal Anda setelah cetak biru itu. Untuk contoh ini, kami akan gunakan bp/nova-cyborg-interaction.

efried:~/openstack/sandbox$ git checkout -b bp/nova-cyborg-interaction
Switched to a new branch 'bp/nova-cyborg-interaction'
efried:~/openstack/sandbox$ git log --oneline -1 --decorate
3d008a3 (HEAD -> bp/nova-cyborg-interaction, origin/master, origin/HEAD, gerrit/master, master) Merge "suggest change  punctuation to english punctuantion"

Ketika Anda git commit (without --amend), Anda sedang membuat komit baru di atas komit apa pun yang Anda mulai. Jika Anda mulai dengan cabang master yang bersih dan baru pulled, itu akan menjadi apa pun yang komit terakhir digabung di cabang master tadi. Dalam contoh ini, itu melakukan 3d008a3.

Jadi katakanlah saya melakukan edit untuk patch pertama saya dan melakukan itu:

efried:~/openstack/sandbox$ echo 'python-cyborgclient>=1.0' >> requirements.txt
efried:~/openstack/sandbox$ echo 'python-cyborgclient==1.1' >> lower-constraints.txt
efried:~/openstack/sandbox$ git add -A
efried:~/openstack/sandbox$ git commit -m "Add cyborg client to requirements"
[bp/nova-cyborg-interaction d76195e] Add cyborg client to requirements
 2 files changed, 2 insertions(+)
 create mode 100644 lower-constraints.txt
efried:~/openstack/sandbox$ git log --oneline -2 --decorate
d76195e (HEAD -> bp/nova-cyborg-interaction) Add cyborg client to requirements
3d008a3 (origin/master, origin/HEAD, gerrit/master, master) Merge "suggest change  punctuation to english punctuantion"

Saya baru saja membuat komit d76195e di atas 3d008a3. Anda akan melihat nama cabang saya (bp/nova-cyborg-interaction) datang bersama saya.

Sekarang saya akan membuat perubahan lain, tetapi hanya sebagian darinya, komitmen work-in-progress:

efried:~/openstack/sandbox$ mkdir -p nova/pci/cyborg
efried:~/openstack/sandbox$ touch nova/pci/cyborg/__init__.py
efried:~/openstack/sandbox$ git add nova/pci/cyborg/__init__.py
efried:~/openstack/sandbox$ git commit -m "WIP: Cyborg PCI handling"
[bp/nova-cyborg-interaction f17f040] WIP: Cyborg PCI handling
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 nova/pci/cyborg/__init__.py
efried:~/openstack/sandbox$ git log --oneline -3 --decorate
f17f040 (HEAD -> bp/nova-cyborg-interaction) WIP: Cyborg PCI handling
d76195e Add cyborg client to requirements
3d008a3 (origin/master, origin/HEAD, gerrit/master, master) Merge "suggest change  punctuation to english punctuantion"

Sekarang komit f17f040 ada di atas d76195e, yang masih di atas 3d008a3 (alias master). Perhatikan bahwa nama cabang saya ikut saya lagi.

Pada titik ini, saya mendorong seri saya ke gerrit. Perhatikan bahwa itu membuat saya mengonfirmasi bahwa saya benar-benar ingin mendorong dua commit sekaligus.

efried:~/openstack/sandbox$ git review
You are about to submit multiple commits. This is expected if you are
submitting a commit that is dependent on one or more in-review
commits, or if you are submitting multiple self-contained but
dependent changes. Otherwise you should consider squashing your
changes into one commit before submitting (for indivisible changes) or
submitting from separate branches (for independent changes).

The outstanding commits are:

f17f040 (HEAD -> bp/nova-cyborg-interaction) WIP: Cyborg PCI handling
d76195e Add cyborg client to requirements

Do you really want to submit the above commits?
Type 'yes' to confirm, other to cancel: yes
remote:
remote: Processing changes: new: 2, refs: 2
remote: Processing changes: new: 2, refs: 2
remote: Processing changes: new: 2, refs: 2, done
remote:
remote: New Changes:
remote:   https://review.opendev.org/635341 Add cyborg client to requirements
remote:   https://review.opendev.org/635342 WIP: Cyborg PCI handling
remote:
To ssh://review.opendev.org:29418/opendev/sandbox.git
 * [new branch]      HEAD -> refs/for/master%topic=bp/nova-cyborg-interaction

Sekarang jika Anda membuka salah satu tautan tersebut - misal https://review.opendev.org/#/c/635342/ - Anda akan melihat bahwa tambalan (patch) ditumpuk secara seri di kanan atas.

Tapi oops, saya melakukan kesalahan pada komit pertama saya. Batasan rendah saya tidak boleh lebih tinggi dari minimum di requirement.txt. Jika saya masih memiliki cabang saya secara lokal, saya bisa melewatkan langkah berikutnya, tetapi sebagai ketelitian untuk menghindari beberapa pratfall umum, saya akan menarik seluruh seri lagi dari gerrit dengan meminta git-review untuk meraih bagian perubahan top :

efried:~/openstack/sandbox$ git review -d 635342
Downloading refs/changes/42/635342/1 from gerrit
Switched to branch "review/eric_fried/bp/nova-cyborg-interaction"

Sekarang saya duduk di perubahan teratas (yang akan Anda perhatikan persis sama dengan sebelum saya mendorongnya - lagi, artinya saya secara teknis bisa saja bekerja dari tempat saya sebelumnya, tetapi lihat di atas):

efried:~/openstack/sandbox$ git log --oneline -3 --decorate
f17f040 (HEAD -> review/eric_fried/bp/nova-cyborg-interaction, bp/nova-cyborg-interaction) WIP: Cyborg PCI handling
d76195e Add cyborg client to requirements
3d008a3 (origin/master, origin/HEAD, gerrit/master, master) Merge "suggest change  punctuation to english punctuantion"

Tapi saya ingin mengedit d76195e, sementara meninggalkan f17f040 ditumpuk dengan benar di atasnya. Di sini saya menggunakan alat yang disebut git-restack <https://docs.openstack.org/infra/git-restack/> _ (jalankan pip install git-restack untuk menginstalnya).

efried:~/openstack/sandbox$ git restack

Ini memunculkan saya ke dalam editor yang menunjukkan kepada saya semua komitmen antara di mana pun saya berada dan cabang utama (sekarang mereka berada di urutan pertama atas):

pick d76195e Add cyborg client to requirements
pick f17f040 WIP: Cyborg PCI handling
<snip>

Saya ingin memperbaiki yang pertama, jadi saya mengubah pick menjadi `` edit``:

edit d76195e Add cyborg client to requirements
pick f17f040 WIP: Cyborg PCI handling
<snip>

Simpan dan keluar dari editor, dan saya melihat:

Stopped at d76195e...  Add cyborg client to requirements
You can amend the commit now, with

  git commit --amend

Once you are satisfied with your changes, run

  git rebase --continue

Saya memperbaiki lower-constraints.txt:

efried:~/openstack/sandbox$ sed -i 's/cyborgclient==1.1/cyborgclient==1.0/' lower-constraints.txt

... dan amend komit saat ini

efried:~/openstack/sandbox$ git commit -a --amend --no-edit
[detached HEAD df226f7] Add cyborg client to requirements
 Date: Wed Feb 6 16:15:30 2019 -0600
 2 files changed, 2 insertions(+)
 create mode 100644 lower-constraints.txt

... dan beri tahu git-restack untuk melanjutkan

efried:~/openstack/sandbox$ git rebase --continue
Successfully rebased and updated refs/heads/review/eric_fried/bp/nova-cyborg-interaction.

Jika saya memiliki seri yang lebih tinggi, dan saya telah mengubah pick menjadi edit untuk lebih dari satu komit, sekarang saya akan duduk di yang berikutnya yang perlu saya edit. Seperti itu, itu adalah satu-satunya hal yang perlu saya lakukan, jadi saya sudah selesai dan duduk di bagian atas seri saya lagi.

efried:~/openstack/sandbox$ git log --oneline -3 --decorate
e937eef (HEAD -> review/eric_fried/bp/nova-cyborg-interaction) WIP: Cyborg PCI handling
df226f7 Add cyborg client to requirements
3d008a3 (origin/master, origin/HEAD, gerrit/master, master) Merge "suggest change  punctuation to english punctuantion"

Perhatikan bahwa hash komit telah berubah untuk both commit (tetapi tidak untuk master). Yang teratas berubah karena diubah menjadi versi yang baru dari yang di tengah.

Sekarang jika saya mendorong kembali seri ke gerrit, saya mendapatkan prompt konfirmasi yang sama, dan kedua perubahan mendapatkan set patch baru. Jika Anda melihat patch teratas di gerrit, Anda akan melihat bahwa patch set 2 muncul hanya sebagai rebase.