Bagikan melalui


Kompatibilitas lintas platform Git

Layanan Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019

Sistem file Windows, macOS, dan Linux memiliki batasan dan perilaku yang tidak selalu didukung oleh satu atau beberapa platform lain. Karena Git adalah teknologi lintas platform, pengembang di satu platform dapat membuat penerapan yang berisi file atau folder yang memiliki nama yang tidak kompatibel dengan sistem file platform lain. Melindungi repositori Anda dari ketidakcocokan ini penting karena pengembang di platform lain mungkin tanpa sadar memeriksa penerapan yang merusak direktori kerja mereka karena nama file atau jalur yang tidak didukung.

Azure Repos menawarkan tiga pengaturan kompatibilitas lintas platform yang membantu melindungi repositori Anda dari orang yang mendorong penerapan yang tidak kompatibel dengan satu atau beberapa platform. Pengaturan ini terkait dengan batasan berikut dengan sistem file:

  • Sensitivitas huruf besar/besar
  • Pembatasan nama file dan folder
  • Pembatasan panjang jalur

Sensitivitas huruf besar/besar

Sistem file Windows dan macOS tidak peka huruf besar/kecil (tetapi mempertahankan kasus) secara default. Sebagian besar sistem file Linux peka huruf besar/kecil. Git awalnya dibangun untuk menjadi sistem kontrol versi kernel Linux, sehingga peka huruf besar/kecil.

Meskipun Git untuk Windows mengatasi banyak masalah dengan sistem operasi yang tidak peka huruf besar/kecil, beberapa kemunculan tetap ada.

Nama file dan folder

Di Linux, memeriksa repositori Git yang berisi File.txt dan file.txt tidak masalah. Itu adalah nama file yang berbeda. Di Windows dan macOS, memeriksa kedua file menyebabkan yang kedua menimpa yang pertama. Jika dua folder hanya berbeda menurut kasus, kontennya dicampur bersama dalam sistem file yang tidak peka huruf besar/kecil.

Ada dua cara untuk memperbaiki repositori yang memiliki konflik kasus:

  • Lihat repositori di lingkungan peka huruf besar/kecil. Ganti nama file dan folder sehingga tidak lagi berkonflik, lalu dorong perubahan tersebut ke repositori. Subsistem Windows untuk Linux adalah salah satu lingkungan seperti itu.
  • Gunakan perintah git mv -f <conflicting name> <non-conflicting name> untuk setiap konflik. Berhati-hatilah untuk menggunakan kapitalisasi yang tepat pada kedua nama file.

Sebaiknya hindari membuat konflik kasus di tempat pertama. Azure Repos menawarkan pengaturan penegakan kasus untuk mencegah dorongan yang akan menyebabkan situasi ini. Bagi pengembang, mengadopsi kebiasaan menggunakan penyelesaian tab untuk menerapkan file juga akan membantu. Karena Windows dan macOS mempertahankan kasus, pendekatan ini memastikan bahwa internal Git melihat casing yang sama persis dengan yang digunakan sistem file.

Nama cabang dan tag

Anda dapat membuat dua cabang atau tag (dikenal sebagai ref) yang hanya berbeda dalam casing. Internal Git, bersama dengan Azure DevOps Services dan Azure DevOps Server, memperlakukannya sebagai dua ref terpisah. Pada komputer pengguna, Git menggunakan sistem file untuk menyimpan ref. Pengambilan dan operasi lainnya mulai gagal karena ambiguitas.

File kecil mewakili setiap ref. Jika nama ref berisi karakter garis miring (/), folder mewakili bagian sebelum garis miring akhir.

Salah satu cara sederhana untuk menghindari masalah adalah selalu menggunakan nama cabang dan tag all-lowercase. Jika Anda sudah membuat dua cabang atau tag yang mengalami masalah ini, Anda dapat memperbaikinya di antarmuka pengguna web Azure Repos.

Untuk memperbaiki nama cabang:

  1. Pada halaman untuk cabang, buka penerapan terkait.
  2. Pada menu pintasan, pilih Cabang baru.
  3. Beri nama baru pada cabang yang tidak memiliki konflik kasus.
  4. Kembali ke halaman untuk cabang dan hapus cabang yang berkonflik.

Untuk memperbaiki nama tag:

  1. Pada halaman untuk tag, buka penerapan yang ditandai.
  2. Pada menu pintasan, pilih Buat tag.
  3. Beri tag nama baru yang tidak memiliki konflik kasus.
  4. Kembali ke halaman untuk tag dan hapus tag yang bertentangan.

Pembatasan jalur dan nama file

Sistem operasi Windows, macOS, dan Linux memiliki berbagai batasan untuk nama dan jalur file. Batasan ini membatasi apa yang dapat Anda beri nama file atau folder, yang dapat membuat masalah bagi tim yang menggunakan Git di beberapa platform.

Misalnya, bayangkan pengembang di satu platform melakukan perubahan pada repositori bersama yang berisi nama file atau panjang jalur yang tidak valid di platform lain. Kemudian, pengembang lain mencoba memeriksa penerapan tersebut pada platform tempat konten tidak valid. Situasi ini menghasilkan direktori kerja rusak yang berpotensi merusak repositori Anda dengan data yang rusak.

Azure Repos menawarkan pengaturan repositori yang memblokir dorongan yang berisi penerapan yang melanggar satu atau beberapa batasan berikut.

Tabel referensi untuk nama dan jalur file

Pembatasan/Platform Windows macOS Linux
Pembatasan nama file Nama file yang dicadangkan: CON, PRN, AUX, NUL, COM1-COM9, LPT1-LPT9

Nama file yang dicadangkan diikuti oleh .

Karakter yang dipesan: \ / : * ? " < >

Nama file yang berakhiran . atau spasi kosong
Nama file yang berakhiran / Nama file yang berakhiran /
Pembatasan panjang jalur Jalur di Windows memiliki panjang maksimum 260 karakter (termasuk terminator null).

Untuk direktori dengan .NET, nama file yang sepenuhnya memenuhi syarat harus kurang dari 260 karakter, dan nama direktori harus kurang dari 248 karakter.
Nama file dibatasi hingga 255 karakter.

Jalur maksimum di HFS+ didokumenkan sebagai tidak terbatas, meskipun beberapa versi macOS menutup jalur pada 1.016 karakter. Beberapa sistem file mendukung 1.016 sebagai jalur maksimum.
Nama file dibatasi hingga 255 karakter.

Maksimum jalur adalah 4096.

Dukungan pengodean

Catatan

Dukungan pengodean yang dijelaskan bagian ini didukung di Azure DevOps Server 2019.1 dan yang lebih baru.

Microsoft menambahkan dukungan untuk pengodean UTF-16 dan UTF-32 melalui titik akhir pendorongan web. Dukungan ini berarti bahwa kami mempertahankan jenis pengodean, sehingga Anda tidak perlu menulis ulang file Anda sebagai UTF-8. Anda juga melihat peringatan saat mencoba menyimpan file yang tidak dikodekan UTF melalui web (yang hanya mendukung pengodean UTF).

Cuplikan layar berikut menunjukkan contoh dialog yang muncul saat Anda memperkenalkan perubahan pengodean dengan menggunakan pendorongan web.

Cuplikan layar yang memperlihatkan dialog tentang memperkenalkan perubahan pengodean melalui pendorongan web.