Push review modu, ek araçlara ihtiyaç duymadan Merge Request'leri otomatik olarak oluşturup yöneterek git push iş akışını basitleştirir ve hem kod kalitesini hem de iş birliğini artırır.
Otomatik kod incelemesi
Codeup'ta, AGit-Flow modu, git pr komutunu çalıştırarak komut satırından kod incelemesi oluşturmanıza olanak tanır; bu da inceleme oluşturma sürecini daha verimli hale getirir. Ancak bu mod, git-repo aracının yerel olarak yüklenmesini ve belirli komutların çalıştırılmasını gerektirir. Birçok geliştirici, gönderilen kodun hedef dala itilmeden önce incelenmesini sağlayan bir iş akışı tercih eder. Push review modu, git push komutunu çalıştırdığınızda commit'leriniz için otomatik olarak bir Merge Request oluşturarak bunu gerçekleştirir ve ek araçlara ihtiyaç duymaz.
Push review modunun avantajları
Push review modu, Codeup'ta sunulan ve verimli bir kod inceleme deneyimi sağlayan yeni bir kod iş birliği yöntemidir:
Geliştiriciler için: Kod incelemesi başlatmak amacıyla artık yeni bir dal oluşturmanız veya web tarayıcısına geçmeniz gerekmez. Tek adımda bir Merge Request oluşturmak için yalnızca
git pushkomutunu çalıştırmanız yeterlidir.Yöneticiler için: Geliştiriciler kodu
pushettiğinde dalın doğrudan güncellenmemesi, bunun yerine otomatik olarak bir Merge Request oluşturulması için bir depo yapılandırabilirsiniz. Bu sayede zorunlu inceleme süreci sayesinde kod kalitesi garanti altına alınır.
Aşağıdaki tabloda push review modu ile standart dal geliştirme modu karşılaştırılmaktadır.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Depo ayarlarınızda push review modunu etkinleştirdikten sonra aşağıdaki avantajlardan yararlanırsınız:
Yeni bir dal oluşturmadan kod katkısı sağlayabilir ve bir Merge Request oluşturabilirsiniz. Değişiklikleri doğrudan master dalında commit ederek gereksiz dalları yönetme yükünden kaçınabilirsiniz.
git pushkomutunu çalıştırmak, değişiklikleri doğrudan dala itmek yerine bir Merge Request oluşturur veya mevcut olanı günceller.İnceleme sonrasında kodunuzda değişiklik yapmanız gerekirse, daha fazla commit ekleyip
git pushkomutunu tekrar çalıştırarak mevcut Merge Request'i otomatik olarak güncelleyebilirsiniz.Yalnızca Görüntüleyici iznine sahip kullanıcılar kod katkısı sağlayabilir. Push işlemleri kodu doğrudan birleştirmek yerine Merge Request oluşturduğundan, yazma izinlerini birkaç yöneticiyle sınırlayıp çoğu geliştiriciye yalnızca okuma izni verebilirsiniz. Bu model, depoda yanlışlıkla yapılan değişiklik riskini azaltır.
Git push davranışını kontrol etmek için bir
push optionkullanabilirsiniz. Daha fazla bilgi için Push review modu ile iş birliği bölümüne bakın.
Push review modunu etkinleştirme
yolunu izleyin ve push review modunu etkinleştirmek veya devre dışı bırakmak için anahtara tıklayın.

Push review modunu etkinleştirmek, git push davranışını değiştirir. Modu etkinleştirmeden önce bu değişikliği lütfen dikkate alın ve anlayın:
Etkinleştirildikten sonra,
git pushkomutunu çalıştırmak uzak dalı doğrudan güncellemek yerine otomatik olarak bir Merge Request oluşturur veya mevcut olanı günceller. Bu durum, depo için Geliştirici izninize sahip olsanız bile geçerlidir.Görüntüleyici rolüne sahip bir kullanıcı, bir Merge Request oluşturmak için
git pushkomutunu çalıştırabilir. Kod, dalın gereksinimlerine göre onaylanıp birleştirilene kadar dala dahil edilmez.git pushkomutu kodu doğrudan güncellemek yerine bir Merge Request oluşturduğundan, push olayları için Webhook'ları tetiklemez.İnceleme iş akışının bir parçası olarak dosya oluşturmak, düzenlemek veya silmek için Codeup web kullanıcı arayüzünü kullanmaya devam edebilirsiniz.
Push review modu ile iş birliği
Aşağıdaki örnekler, geliştirme iş birliği için push review modunun nasıl kullanılacağını göstermektedir.
Otomatik Merge Request oluşturma
Yeni bir geliştirme göreviniz olduğunu varsayalım. Push review moduyla iş akışı yalnızca iki adımdan oluşur:
Master dalında geliştirme yapın.
git pushkomutunu çalıştırın.
Bir örneği adım adım inceleyelim.
-
Örnek deponun
masterdalında geliştirme yapın ve bir commit oluşturun; örneğin,27e76f58.$ git log commit 27e76f582ca7207a695dd8762b66ef443adcc572 (HEAD -> master) Author: Codeup User <codeup.user@example.com> Date: Tue Oct 11 10:16:18 2022 +0800 feat: new feature Signed-off-by: Codeup User <codeup.user@example.com> commit 44094ec92eb122deab5a0367552bd081540c4353 (origin/master, origin/HEAD) Author: Codeup User <codeup.user@example.com> Date: Tue Oct 11 10:09:39 2022 +0800 Initial commit -
Ardından,
git pushkomutunu çalıştırarak değişiklikleri uzak depoya itin:$ git push Enumerating objects: 4, done. Counting objects: 100% (4/4), done. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 310 bytes | 310.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 remote: +-----------------------------------------------------------------------------------+ remote: | The following tips are provided by Codeup: | remote: +-----------------------------------------------------------------------------------+ remote: | Merge request #31620 has been created, please visit: | remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31620 | remote: +-----------------------------------------------------------------------------------+ To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git * [new reference] master -> refs/merge-requests/31620/head
Gördüğünüz gibi, push review modu etkinleştirildiğinde git push komutu uzak dalı doğrudan güncellemedi. Bunun yerine, #31620 numaralı Merge Request'i oluşturdu. Bu Merge Request'in kaynağı en son yerel commit'iniz, hedefi ise mevcut daldır. Bunu Merge Request ayrıntıları sayfasında doğrulayabilirsiniz:

Bu iş akışı, bir özellik dalı oluşturma veya Merge Request oluşturmak için web tarayıcısı kullanma ihtiyacını ortadan kaldırarak süreci büyük ölçüde basitleştirir. Ayrıca, tüm push işlemlerinin birleştirilmeden önce incelenmesi gerektiğinden code quality garantilenir.
Otomatik Merge Request güncellemeleri
Kod incelemesi sırasında, inceleyenlerin geri bildirimlerine dayanarak kodunuzu birden çok kez değiştirmeniz gerekir. İlgili Merge Request'i güncellemek için git push komutunu tekrar çalıştırmanız yeterlidir. Bir örneği inceleyelim.
İlk olarak, 27e76f58 commit'ini temel alarak inceleme yorumlarına göre değişiklikler yapın ve e00db452 adlı yeni bir commit oluşturun.
$ git log
commit e00db4522f2d6ca5b42377ca76c7b3a7e12db8a5 (HEAD -> master)
Author: Codeup User <codeup.user@example.com>
Date: Tue Oct 11 11:09:42 2022 +0800
feat: fix comment
Signed-off-by: Codeup User <codeup.user@example.com>
commit 27e76f582ca7207a695dd8762b66ef443adcc572
Author: Codeup User <codeup.user@example.com>
Date: Tue Oct 11 10:16:18 2022 +0800
feat: new feature
Signed-off-by: Codeup User <codeup.user@example.com>
commit 44094ec92eb122deab5a0367552bd081540c4353 (origin/master, origin/HEAD)
Author: Codeup User <codeup.user@example.com>
Date: Tue Oct 11 10:09:39 2022 +0800
Initial commit
Ardından, git push komutunu çalıştırın. Sistem Merge Request'i otomatik olarak günceller ve bir onay mesajı görüntüler.
$ git push
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 340 bytes | 340.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: +-----------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup: |
remote: +-----------------------------------------------------------------------------------+
remote: | Merge request #31620 has been updated, please visit: |
remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31620 |
remote: +-----------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
27e76f582c..e00db4522f master -> refs/merge-requests/31620/head
Çıktı, bu push işleminin #31620 numaralı Merge Request'i güncellediğini göstermektedir. Ayrıntılar sayfasını kontrol ederseniz, Merge Request'in kaynak sürümünün e00db4522 olarak değiştiğini ve commit geçmişinde artık iki commit bulunduğunu görürsünüz. Daha fazla değişiklik gerekirse bu işlemi tekrarlayın.
Yeni bir Merge Request oluşturma
git push komutunu tekrar tekrar çalıştırmak mevcut bir Merge Request'i otomatik olarak günceller. Mevcut olanı güncellemek yerine yeni bir Merge Request oluşturmak istiyorsanız, komuta bir push option ekleyebilirsiniz. Yeni bir Merge Request oluşturmak için git push -o review=new komutunu çalıştırın.
Yerel değişiklikleri yaptıktan sonra git push -o review=new komutunu çalıştırın. ID'si #31626 olan yeni bir Merge Request oluşturulur.
$ git push -o review=new
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 361 bytes | 361.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: +-----------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup: |
remote: +-----------------------------------------------------------------------------------+
remote: | Merge request #31626 has been created, please visit: |
remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31626 |
remote: +-----------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
* [new reference] master -> refs/merge-requests/31626/head
Not: Zaten açık olan aynı kimliğe sahip bir Merge Request varsa yeni bir tane oluşturamazsınız.
$ git push -o review=new
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: +-----------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup: |
remote: +-----------------------------------------------------------------------------------+
remote: | Merge request create failed. There exists a same merge request in progress: |
remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31620 |
remote: +-----------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
! [remote rejected] master -> master (create MR failed)
error: failed to push some refs to 'https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git'
Belirli bir Merge Request'i güncelleme
Aynı hedef dal için birden çok açık Merge Request'iniz varsa, sistem hangisini güncelleyeceğini belirleyemediğinden git push komutu başarısız olur.
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 294 bytes | 294.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: +-------------------------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup: |
remote: +-------------------------------------------------------------------------------------------------+
remote: | You need to manually specify the merge request to update because there are already |
remote: | multiple merge requests that you created earlier for the same target branch: |
remote: | |
remote: | * [ID: 31626] https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31626 |
remote: | * [ID: 31620] https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31620 |
remote: | |
remote: | Then, update specific merge request based on it's ID (MR-ID): |
remote: | git push -o review=<MR-ID> |
remote: | |
remote: | Or you can create a new one: |
remote: | git push -o review=new |
remote: +-------------------------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
! [remote rejected] master -> master (unable to determine which mr to update)
error: failed to push some refs to 'https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git'
Çıktı, aynı hedef dal için ID'leri 31626 ve 31620 olan iki açık Merge Request olduğunu göstermektedir. Sistem hangisini güncellemek istediğinizi belirleyemez. İki seçeneğiniz vardır:
Yeni bir Merge Request oluşturmak için
-o review=newseçeneğini kullanın.Güncellemek istediğiniz Merge Request'in ID'sini belirtmek için
-o review=<MR-ID>seçeneğini kullanın.
İlk seçenek Yeni bir Merge Request oluşturma bölümünde gösterilmişti. Şimdi belirli bir Merge Request'in nasıl güncelleneceğine bakalım.
#31626 numaralı Merge Request'i güncellemek için şu komutu çalıştırın: git push -o review=31626.
$ git push -o review=31626
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 303 bytes | 303.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote: +-----------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup: |
remote: +-----------------------------------------------------------------------------------+
remote: | Merge request #31626 has been updated, please visit: |
remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31626 |
remote: +-----------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
0ba010f2ff..037578c634 master -> refs/merge-requests/31626/head
Bu işlem, ID'si 31626 olan Merge Request'i günceller.
Güncelleme çakışmalarını çözme
Bir Merge Request'i güncellemeye çalıştığınızda, başka bir kullanıcının onu zaten güncellemiş olduğunu görebilirsiniz. Push işleminizin diğerinin değişikliklerinin üzerine yazmasını önlemek için güncelleme başarısız olur. Örneğin, git push -o review=31644 komutunu çalıştırarak #31644 numaralı Merge Request'i güncellemeye çalışırsanız aşağıdaki hatayı görebilirsiniz:
$ git push -o review=31644
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 326 bytes | 326.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: +--------------------------------------------+
remote: | The following tips are provided by Codeup: |
remote: +--------------------------------------------+
remote: | MR is diverged with this push |
remote: +--------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
! [remote rejected] master -> master (MR is diverged with this push)
error: failed to push some refs to 'https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git'
Hata mesajı, push işleminizin uzak Merge Request ile ayrıştığını göstermektedir. İki seçeneğiniz vardır:
Diğer kullanıcının değişikliklerini çekin, çakışmaları yerel olarak çözümleyin ve ardından tekrar push yapın.
Merge Request'i yerel değişikliklerinizle zorla güncelleyin.
İlk seçeneği, yani uzak değişiklikleri çekmeyi ve çakışmaları yerel olarak çözümlemeyi inceleyelim.
İlk olarak, git fetch origin refs/merge-requests/<mr-id>/head komutunu çalıştırın. Bu örnekte mr-id değeri 31644 olduğundan komut şöyledir: git fetch origin refs/merge-requests/31644/head
$ git fetch origin refs/merge-requests/31644/head
From https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo
* branch refs/merge-requests/31644/head -> FETCH_HEAD
Ardından, git rebase FETCH_HEAD komutunu çalıştırarak yerel değişikliklerinizi çekilen referansın üzerine rebase edin. Bu işlem çakışmalara neden olabilir. Çakışma oluşursa bunları normal şekilde çözümleyin.
$ git rebase FETCH_HEAD
Successfully rebased and updated refs/heads/master.
Başarılı bir rebase işleminden sonra yerel dalınız uzak değişiklikleri içerir. Artık tekrar push yapabilirsiniz.
$ git push -o review=31644
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 331 bytes | 331.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote: +-----------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup: |
remote: +-----------------------------------------------------------------------------------+
remote: | Merge request #31644 has been updated, please visit: |
remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31644 |
remote: +-----------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
a4a2cad45c..8da076fb44 master -> refs/merge-requests/31644/head
Artık #31644 numaralı Merge Request'i başarıyla güncellediniz.
Merge Request'i zorla güncelleme
Bazen, bir Merge Request'teki uzak değişiklikleri yerel sürümünüzle değiştirmek isteyebilirsiniz. Bunu yapmak için zorla güncelleme gerçekleştirmeniz gerekir.
İki bilgiye ihtiyacınız olacak:
Merge Request ID'si. Bu, Merge Request URL'sinin sonundaki sayıdır. Örneğin, URL
https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31644ise ID31644olur.Merge Request'in mevcut kaynak sürümü. Bunu Merge Request ayrıntıları sayfasında bulabilirsiniz. Bu örnekte kaynak sürüm
8da076fbdeğeridir.
Ardından, git push -o review=<mr-id> -o old-oid=<old-oid> komutunu çalıştırın. Bu örnek için komut git push -o review=31644 -o old-oid=8da076fb şeklindedir.
Bu komut, #31644 numaralı Merge Request'i yerel sürümünüzle eşleşecek şekilde zorla günceller. Dikkatli olun: Bu işlem, diğer kullanıcılar tarafından yapılan değişikliklerin üzerine yazar. Başkalarının çalışmalarının üzerine yazmamak için uzak değişikliklerden vazgeçmek istediğinizden emin olduğunuzda yalnızca bu komutu kullanın.
$ git push -o review=31644 -o old-oid=8da076fb
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote: +-----------------------------------------------------------------------------------+
remote: | The following tips are provided by Codeup: |
remote: +-----------------------------------------------------------------------------------+
remote: | Merge request #31644 has been updated, please visit: |
remote: | https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo/merge_request/31644 |
remote: +-----------------------------------------------------------------------------------+
To https://codeup.aliyun.com/61234c2d1bd96aa110f27b9c/demo.git
8da076fb44..8da076fb44 master -> refs/merge-requests/31644/head
İncelemeyi atlayıp doğrudan push yapma
Bir yorumda yazım hatası düzeltmek gibi küçük bir değişiklik yaptıysanız ve kod inceleme sürecini atlamak istiyorsanız git push -o review=no komutunu kullanabilirsiniz. Bu komut, push review modu devre dışı bırakıldığında standart bir git push komutuyla aynı şekilde davranır. review=no seçeneğini kullanmak için hedef dal üzerinde doğrudan push iznine sahip olmanız gerektiğini unutmayın.
Kullanım notları
Bir Merge Request'i güncellemek için onun yazarı veya inceleyeni olmanız gerekir. Aksi takdirde güncelleme başarısız olur.
remote: +---------------------------------------------------------------------+
remote: | The following tips are provided by Codeup: |
remote: +---------------------------------------------------------------------+
remote: | Merge request #31644 update failed. |
remote: | You need to be the author or reviewer to update this merge request. |
remote: +---------------------------------------------------------------------+