Skip to content

Instantly share code, notes, and snippets.

@cemtopkaya
Last active April 3, 2023 02:08
Show Gist options
  • Save cemtopkaya/69a6f7c2eada62f93fc39edf16420cc1 to your computer and use it in GitHub Desktop.
Save cemtopkaya/69a6f7c2eada62f93fc39edf16420cc1 to your computer and use it in GitHub Desktop.
git komutlarının örneklerle açıklaması

git submodule foreach

git submodule update

git alt modülü başlatmak için

git submodule --init

git submodule kaldırmak için

git rm <submodule yolu (path)>

git submodule sonlandırmak için ama peşine update

git submodule deinit -f . git submodule update --init

git modülün dosya yolunu değiştirmek için aşağıdaki komut sonrasında commit et

git mv old/submod new/submod

$ ll .git/modules/oss/
total 12
drwxr-xr-x 3 root root 4096 Mar 19 01:12 ./
drwxr-xr-x 3 root root 4096 Mar 19 00:54 ../
drwxr-xr-x 8 root root 4096 Mar 19 01:15 cinar_upf_dpdk/
$
$ cat .gitmodules 
[submodule "oss/cinar_upf_dpdk"]
        path = oss/cinar_upf_dpdk
        url = ssh://git@bitbucket.ulakhaberlesme.com.tr:7999/cin/cinar_upf_dpdk.git
        ignore = untracked
$ 
$ git submodule deinit -f .
Cleared directory 'oss/cinar_upf_dpdk'
Submodule 'oss/cinar_upf_dpdk' (http://gitlab.ulakhaberlesme.com.tr/CIN/CINAR_UPF_DPDK.git) unregistered for path 'oss/cinar_upf_dpdk'
$ 
>> modüllerin git izlerinin olduğu yer 
$ ll .git/modules/oss/
total 8
drwxr-xr-x 2 root root 4096 Mar 19 00:54 ./
drwxr-xr-x 3 root root 4096 Mar 19 00:54 ../
$ 
$ 
$ cat .gitmodules 
[submodule "oss/cinar_upf_dpdk"]
        path = oss/cinar_upf_dpdk
        url = ssh://git@bitbucket.ulakhaberlesme.com.tr:7999/cin/cinar_upf_dpdk.git
        ignore = untracked
$ 
$ ll .git/modules/
total 12
drwxr-xr-x 3 root root 4096 Mar 19 00:54 ./
drwxr-xr-x 9 root root 4096 Mar 19 00:58 ../
drwxr-xr-x 2 root root 4096 Mar 19 00:54 oss/
$ 
$ git submodule deinit -f .
Cleared directory 'oss/cinar_upf_dpdk'
$ 
$ cat .gitmodules 
[submodule "oss/cinar_upf_dpdk"]
        path = oss/cinar_upf_dpdk
        url = ssh://git@bitbucket.ulakhaberlesme.com.tr:7999/cin/cinar_upf_dpdk.git
        ignore = untracked
$ 
$ git rm oss/cinar_upf_dpdk
rm 'oss/cinar_upf_dpdk'
$ 
$ cat .gitmodules 
$

Etiketin işaretlediği commit ID değerinin çekilmesi

Etiketin işaret ettiği commit,

git rev-list <tag-name> -n 1

komutu ile çekilebilir. Burada <tag-name>, etiketin adını ifade eder. -n 1 ise sadece en üstteki commit'in alınmasını sağlar.

commit ID değerini işaret eden etiketlerin listesi

git tag --contains <commit-id>

Burada <commit-id>, hangi commit için etiketleri listelemek istediğinizi belirtmek için kullanmanız gereken commit ID'sidir.

Bu komut, belirtilen commit ID'si ile ilişkili olan tüm etiketleri listeler. Eğer birden fazla etiket aynı commit ID'siyle ilişkili ise, hepsi bu komut çıktısında görünecektir.

Etiketin işaretlediği commit ID değerini işaret eden tüm etiketlerin çekilmesi

$ export ETIKET=cnrupf-dbg-v1.0.0.356
$ git tag --contains $(git rev-list $ETIKET -n 1)
cnrupf-1.0.0.356
cnrupf-dbg-v1.0.0.356
cnrupf-v1.0.0.356

Git etiketlerinde hangi karakterleri kullanamayız?

Git etiketlerinde (tag) aşağıdaki karakterler kullanılamaz: boşluk, ~, ^, :, ?, *, [ ve ASCII kontrol karakterleri (0…31 ve 127). Ayrıca etiket isimleri @{ ile başlayamaz ve / ile bitmemelidir. Etiket isimleri ayrıca .lock ile bitmemelidir.

Bir etiket oluşturmak için

Git etiketi oluşturmak için aşağıdaki komutu kullanabilirsiniz:

git tag <tagname>

Bu komut <tagname> adlı bir etiket oluşturur. Etiketi oluşturduktan sonra git push --tags komutunu kullanarak etiketi uzak depoya gönderebilirsiniz.

Açıklaması olan bir Git etiketi oluşturmak için

git tag -a <tagname> -m "<message>"

Bu komut <tagname> adlı bir etiket oluşturur ve etiketin açıklamasını <message> olarak ayarlar. Etiketi oluşturduktan sonra git push --tags komutunu kullanarak etiketi uzak depoya gönderebilirsiniz.

Bir Git etiketinin açıklamasını görmek için

git tag -n <tagname>

Bu komut <tagname> adlı etiketin açıklamasını gösterir. n Satır sayısını getirir.

cemt@PC-CEM-TOPKAYA:~/projects/deneme$ git tag -n cnrupf-dbg-v1.0.0
cnrupf-dbg-v1.0.0 ... Bu etiketin açıklaması

cemt@PC-CEM-TOPKAYA:~/projects/deneme$ git tag -n2 cnrupf-dbg-v1.0.0
cnrupf-dbg-v1.0.0 ... Bu etiketin açıklaması
    paket: cnrupf-dbg

cemt@PC-CEM-TOPKAYA:~/projects/deneme$ git tag -n100 cnrupf-dbg-v1.0.0
cnrupf-dbg-v1.0.0 ... Bu etiketin açıklaması
    paket: cnrupf-dbg
    surum: 1.0.0
    dagitim: unstable

Eğer tüm etiketlerin açıklamalarını görmek isterseniz:

 git tag -n komutunu kullanabilirsiniz.

git show ile etiketin tüm ayrıntılarını görüntülemek

git show komutu ile bir etiketin açıklamasını görmek için git show <tagname> komutunu kullanabilirsiniz. Bu komut etiketin açıklamasını ve etiketin işaret ettiği nesnenin ayrıntılarını gösterir. Eğer sadece etiketin açıklamasını görmek isterseniz git tag -n <tagname> komutunu kullanabilirsiniz.

cemt@PC-CEM-TOPKAYA:~/projects/deneme$ git show cnrupf-dbg-v1.0.0
tag cnrupf-dbg-v1.0.0
Tagger: Cem Topkaya <cem.topkaya@ulakhaberlesme.com.tr>
Date:   Mon Mar 27 19:29:36 2023 +0300

... Bu etiketin açıklaması
paket: cnrupf-dbg
surum: 1.0.0
dagitim: unstable

commit d1e42bfe0803ea3e564490a24ff411a2d696cffd (HEAD -> main, tag: cnrupf-dbg-v1.0.0, origin/main, origin/HEAD)
Author: Cem Topkaya <cem.topkaya@ulakhaberlesme.com.tr>
Date:   Mon Mar 27 04:15:41 2023 +0000

    Add new file

diff --git a/dosya b/dosya
new file mode 100644
index 0000000..bc4900a
--- /dev/null
+++ b/dosya
@@ -0,0 +1 @@
+ilk sürüm

Etiketin adı veya açıklamasını --format ile çekmek

git tag -l --format='%(tag) %(subject)' <etiket-adi> komutuyla etiket (%(tag)) ve açıklamasını %(subject) ayrı ayrı alabiliriz.

cemt@PC-CEM-TOPKAYA:~/projects/deneme$ git tag -l --format='%(tag) %(subject)' cnrupf-dbg-v1.0.0
cnrupf-dbg-v1.0.0 ... Bu etiketin açıklaması paket: cnrupf-dbg surum: 1.0.0 dagitim: unstable

Yeni satırları gösterecek şekilde etiket açıklamasını getirmek:

cemt@PC-CEM-TOPKAYA:~/projects/deneme$ git cat-file -p cnrupf-dbg-v1.0.0
object d1e42bfe0803ea3e564490a24ff411a2d696cffd
type commit
tag cnrupf-dbg-v1.0.0
tagger Cem Topkaya <cem.topkaya@ulakhaberlesme.com.tr> 1679934576 +0300

... Bu etiketin açıklaması
paket: cnrupf-dbg
surum: 1.0.0
dagitim: unstable

Yukarıdaki çıktıdan sadece açıklama kısmını almak için git cat-file -p cnrupf-dbg-v1.0.0 | awk '/^$/ {p=1; next} p' komutu çalıştırılır.

awk komutu ile git cat-file komutunun çıktısını işleyerek boş satırdan sonraki satırları görüntülemek için kullanılan awk '/^$/ {p=1; next} p' komutunun açıklaması şu şekildedir:

  • /^$/: Bu ifade boş satırları eşleştirir. ^ ve $ karakterleri satırın başlangıcını ve sonunu belirtir. Aralarında hiçbir karakter olmadığı için bu ifade boş satırları eşleştirir.
  • {p=1; next}: Bu ifade boş satır bulunduğunda çalıştırılır. p değişkenini 1 olarak ayarlar ve next komutu ile bir sonraki satıra geçer.
  • p: Bu ifade p değişkeninin değerini kontrol eder. Eğer p değişkeninin değeri 1 ise bu ifade doğru olur ve ilgili satır görüntülenir.

Bu komutun çalışma mantığı şu şekildedir: Komut ilk olarak boş satır bulana kadar tüm satırları işler. Boş satır bulunduğunda p değişkenini 1 olarak ayarlar ve bir sonraki satıra geçer. Daha sonra gelen tüm satırlar için p değişkeninin değeri kontrol edilir. Eğer p değişkeninin değeri 1 ise ilgili satır görüntülenir. Böylece boş satırdan sonraki tüm satırlar görüntülenmiş olur.

cemt@PC-CEM-TOPKAYA:~/projects/deneme$ git cat-file -p cnrupf-dbg-v1.0.0 | awk '/^$/ {p=1; next} p'
... Bu etiketin açıklaması
paket: cnrupf-dbg
surum: 1.0.0
dagitim: unstable

Bir etiketin açıklamasını güncellemek için

ya silip yeniden oluşturursunuz ya da etiketin üstüne güncelleme yapabilirsiniz. Silip Yeniden Oluşturalım

  1. git tag -d <etiket_adı> komutunu kullanarak güncellemek istediğiniz etiketi silin. Örneğin, etiket adı v1.0.0 olan etiketi silmek için git tag -d v1.0.0 komutunu kullanabilirsiniz.

  2. Daha sonra git tag komutuyla etiketin açıklamasını güncellemek istediğiniz commit id'sini etiketleyin ve -f veya --force parametresini kullanarak zorla işlem yapın. Örneğin, etiket adı v1.0.0 olan bir commit'i etiketlemek için git tag -a -f v1.0.0 <commit_id> komutunu kullanabilirsiniz.

  3. Git, varsayılan metin editörü olan Vim'i açacak ve açıklama alanında Esc tuşuna basarak komut moduna geçmeniz gerekecektir. Açıklamayı güncelleyin ve :wq komutunu kullanarak Vim'i kaydedip çıkın.

  4. Etiketi git push --force origin <etiket_adı> komutuyla uzak sunucuya gönderin. Bu, etiketin uzak sunucuda da güncellenmesini sağlayacaktır.

Etiketin Üstüne Yazalım

git tag cnrupf-dbg-v1.0.0 cnrupf-dbg-v1.0.0^{} -m "Bu etiketin açıklaması
ilk satırı
ikinci satırı
üçüncü satırı"

Bu komut, cnrupf-dbg-v1.0.0 adında bir etiket oluşturur. Etiket, cnrupf-dbg-v1.0.0 işaretli commit'in parent'ına (cnrupf-dbg-v1.0.0^) işaret eder. ^{} ifadesi, eğer işaret edilen nesne bir tag ya da başka bir referans değilse, işaret edilen nesnenin tipini belirtmek için kullanılır.

Etikete bir açıklama da eklenir. Açıklama "Bu etiketin açıklaması\nilk satırı\nikinci satırı\nüçüncü satırı" şeklindedir. \n karakterleri, her bir satırın ayrı bir satırda görüntülenmesini sağlar.

Bir dizi etiketin açıklamasını değiştirmek için -f anahtarını kullanarak gösterelim ve sonra reject olma durumuna karşın -f ile sunucuya gönderelim:

$ for tag in $(git tag -l | grep -E "^v.*"); do echo $tag; git tag $tag $tag^{} -f -m "package: cnrnrf
os: ubuntu
kernel: 4.8.0
package-type: debian
version: ${tag/v}
distrubution: xenial-unstable
urgency: low"; done

$ git push -f --tags

Bir commit değerini işaret eden etiketlerin listesi

git rev-list -n 1 <etiket-adı> ile işaret ettiği commit değeri git describe --exact-match <commit-id> ile belirli commit'i işaret eden etiketlerin listesi

cemt@PC-CEM-TOPKAYA:~/projects/CINAR_SMF$ git rev-list -n 1 cnrsmf-1.0.0.11
3b0725ad5ac0de277141a8c3432a35877a7d6852
cemt@PC-CEM-TOPKAYA:~/projects/CINAR_SMF$ git describe --exact-match `git rev-list -n 1 cnrsmf-1.0.0.11`
cnrsmf-1.0.0.11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment