kule commit
Görevin değişikliklerini çalışma klasörüne uygular ve bir kontrol noktası saklar. Neyin geçebileceğine politika karar verir.
Kullanım
kule commit [OPTIONS] <TASK>
Açıklama
kule commit, gerçek klasörünüze yazan tek komuttur. kule status'un
gösterdiği değişiklikleri alır ve çalışma klasörüne uygular.
Önce politika karar verir. Her değişikliğin bir kararı vardır (bkz. Politika):
- kendiliğinden geçen değişiklikler commit edilir;
- onay bekleyen değişiklikler (yerleşik balanced politikasında
manifest'ler, lock dosyaları, CI dosyaları, git config, toplu silmeler, …)
yalnızca
--approveile commit edilir; - reddedilen değişiklikler (örneğin yeni bir git hook'u)
--approveile bile asla commit edilmez.
Bir şey geri tutulursa hiçbir şey commit edilmez: Kule kararı yazdırır ve
3 çıkış koduyla çıkar. Bir commit ya hep ya hiçtir.
Bir kontrol noktası saklanır. Kule yazmadan önce, commit'in yerine koyacağı şeyleri görevin kendi kontrol noktası deposuna kaydeder; böylece kule undo klasörü eski hâline getirebilir. Her commit ayrıca görevin imzalı geçmişine bir kayıt olarak eklenir.
Dosyalar güvenle yazılır. Her dosya bir yeniden adlandırma (rename)
üzerinden yerine konur; kimse yarım bir dosya görmez. Kule'nin .env
dosyalarında maskelediği değerler yazılırken gerçek değerlerine döndürülür.
Çalışma klasörü bu arada değişmemiş olmalı. Görevin de değiştirdiği bir dosyayı biri gerçek klasörde değiştirdiyse, iki değişiklik her ikisinin de başladığı hâlden yola çıkılarak üç yönlü birleştirilir: farklı fonksiyonlara, bölümlere ya da anahtarlara yapılan değişikliklerin ikisi de girer. İkisi de aynı fonksiyonu, bölümü ya da anahtarı değiştirdiyse commit bir çakışma olarak reddedilir ve hiçbir şey yazılmaz. Bkz. Sync ve birleştirme.
Yok sayılan yollar geride kalır. Çalışma klasörünün .gitignore'unun
dışarıda bıraktığı yollar (derleme çıktısı, önbellekler, .env),
--include-ignored vermediğiniz sürece kopyada kalır. Politika bunları da
değerlendirir.
Görevde bir ajan ya da bir kule exec komutu çalışırken kule commit
reddedilir.
Argümanlar
| Ad | Zorunlu | Anlamı |
|---|---|---|
TASK | evet | Görevin tam kimliği. Bkz. Bir göreve ad vermek. |
Seçenekler
| Seçenek | Değer | Varsayılan | Anlamı |
|---|---|---|---|
--approve | Politikanın bir insana sorduğu değişiklikleri de commit eder. Reddedilen değişiklikler yine asla geçmez. | ||
--remember | --approve ile birlikte: bu klasörde, şimdi onaylanan dosyalar (manifest'ler, CI ve proje dosyaları) hakkında bir daha sormaz. Bkz. kule rules. | ||
--include-ignored | Çalışma klasörünün .gitignore'unun dışarıda bıraktığı yolları da alır. | ||
--home | yol | ~/.kule | Kule'nin ev klasörü (ya da KULE_HOME). Bkz. genel seçenekler. |
Örnekler
Her şey geçiyor:
$ kule commit 3422f830
committed 1 changes · checkpoint 2
Bir şey onay bekliyor:
$ kule commit 3efe1ca8
policy: waits for approval
Cargo.toml · waits for approval (manifests-and-lockfiles)
kule: not committed; rerun with --approve to approve the changes above
$ echo $?
3
$ kule commit 3efe1ca8 --approve
committed 3 changes · checkpoint 1
Onaylayın ve bu klasörde bu dosyalar hakkında bir daha sorulmasın:
kule commit 3efe1ca8 --approve --remember
committed 3 changes · checkpoint 1
not asked again on this folder: changes to Cargo.toml (manifests-and-lockfiles)
Reddedilen bir değişiklik:
$ kule commit 3422f830 --approve
policy: denied
git hook pre-commit · denied (git-hooks)
kule: not committed; the policy denies the changes above
Değişiklikleri atın (kule rollback), ya da kopyayı kule shell içinde
elle düzeltip kule status'a tekrar bakın.
Derleme çıktısını da alın:
$ kule commit 3422f830 --include-ignored
committed 2 changes · checkpoint 3
Çalışma klasörüyle bir çakışma:
$ kule commit 3efe1ca8
kule: the workspace changed since Kule last saw it, at: README.md (both changed section App)
hint: roll back, or rerun the task on the current workspace
Çıktı
| Satır | Anlamı |
|---|---|
committed N changes · checkpoint C | Değişiklikler yerine kondu. N, commit'in yazdığı her yolu (.git içindekiler dahil) sayar; bu yüzden kule status'un gösterdiği dosya sayısından büyük olabilir. C, kule undo'nun kullandığı kontrol noktasıdır. |
merged with what the folder changed meanwhile: <paths> | Bu dosyalar çalışma klasöründe de değişmişti ve birleştirildi. |
not asked again on this folder: … | --remember ile: Kule'nin bundan sonra sormadan geçireceği şeyler. |
nothing to commit | Kopya, çalışma klasöründekinin aynısını tutuyor. |
policy: … ve kule: not committed; … | Karar değişiklikleri geri tuttu; hiçbir şey yazılmadı (çıkış kodu 3). |
Hatalar ve çözümleri
| Mesaj | Ne yapmalı |
|---|---|
kule: not committed; rerun with --approve to approve the changes above | Neyin beklediğine bakın (kule status), katılıyorsanız kule commit --approve çalıştırın. |
kule: not committed; the policy denies the changes above | Reddedilen değişiklikler asla geçmez. Değişiklikleri atın ya da o değişikliği kopyada geri alın. |
kule: the workspace changed since Kule last saw it, at: <paths> | Biri bu dosyaların aynı kısımlarını gerçek klasörde değiştirdi. kule rollback çalıştırın, ya da (birleşebiliyorlarsa) klasörün değişikliklerini kule sync ile kopyaya alıp yeniden inceleyin. |
kule: workspace <path> is gone … | Gerçek klasör taşındı ya da silindi; commit'in yazacağı bir yer yok. |
kule: <path> changed since it was reviewed; nothing was committed | Bir ayar dosyası inceleme ile commit arasında değişti. kule status'a tekrar bakın. |
kule: task <id> is busy: another kule command holds its lock | Diğer komutun bitmesini bekleyin. |
Uygulamada
Review altında Commit, ya da bir şey onay bekliyorsa Approve and
commit (onayla ve commit et) (Mod+Shift+Enter). Geri tutulan bir dosyadaki
Don't ask again in this folder (bu klasörde bir daha sorma) --remember'ın,
Also commit these (bunları da commit et) ise --include-ignored'ın
yaptığını yapar. Bkz. Review.