GNU/Linux >> Belajar Linux >  >> Linux

Pengembalian Kereta dan Umpan Baris pada akhirnya akan menggigit Anda - Beberapa Kiat Git

Apa itu Kereta dan mengapa Kembali? Umpan Jalur Pengembalian Kereta APA ARTINYA SEMUANYA!?!

Kertas pada mesin tik naik secara horizontal di atas kereta. Carriage Return atau CR adalah karakter kontrol yang tidak dapat dicetak yang akan mengatur ulang mesin tik ke awal baris teks.

Namun, Pengembalian Kereta memindahkan kereta ke belakang tetapi tidak memajukan kertas satu baris. Kereta bergerak pada sumbu X...

Dan Line Feed atau LF adalah karakter kontrol yang tidak dapat dicetak yang memutar Platen (silinder karet utama) satu baris.

Oleh karena itu, Carriage Return dan Line Feed. Dua tindakan, dan selama bertahun-tahun, dua karakter kontrol.

Setiap sistem operasi tampaknya mengkodekan EOL (end of line) secara berbeda. Sistem operasi di akhir tahun 70-an semuanya menggunakan CR LF secara bersamaan karena mereka berinteraksi dengan mesin tik/printer setiap hari.

Windows menggunakan CRLF karena DOS menggunakan CRLF karena CP/M menggunakan CRLF karena sejarah.

Mac OS menggunakan CR selama bertahun-tahun hingga OS X beralih ke LF.

Unix hanya menggunakan satu LF di atas CRLF dan sejak awal, kemungkinan karena sistem seperti Multics mulai menggunakan hanya LF sekitar tahun 1965. Menyimpan satu byte SETIAP LINE adalah masalah besar untuk penyimpanan dan transmisi.

Maju cepat ke 2018 dan mungkin ini saatnya Windows juga beralih ke hanya menggunakan LF sebagai karakter EOL untuk File Teks.

Mengapa? Sebagai permulaan, Microsoft akhirnya memperbarui Notepad untuk menangani file teks yang menggunakan LF.

TAPI

Apakah perubahan seperti itu mungkin terjadi? Mungkin tidak, itu akan menghancurkan dunia. Inilah NewLine di .NET Core.

public static String NewLine {
    get {
        Contract.Ensures(Contract.Result() != null);
#if !PLATFORM_UNIX
        return "\r\n";
#else
        return "\n";
#endif // !PLATFORM_UNIX
    }
}

Terlepas dari itu, jika Anda secara teratur menggunakan Windows dan WSL (Linux di Windows) dan Linux bersama-sama, Anda harus sadar dan sadar akan CRLF dan LF.

Saya mengalami situasi yang menarik baru-baru ini. Pertama, mari kita tinjau apa yang dilakukan Git

Anda dapat mengonfigurasi .gitattributes untuk memberi tahu Git cara menangani file, baik secara individual maupun ekstensi.

Ketika

git config --global core.autocrlf true

diatur, git akan secara otomatis mengonversi file secara diam-diam sehingga diperiksa dengan cara khusus OS. Jika Anda menggunakan Linux dan checkout, Anda akan mendapatkan LF, jika Anda menggunakan Windows, Anda akan mendapatkan CRLF.

Viola di Twitter menawarkan klarifikasi penting:

"gitattributes mengontrol perilaku akhir baris untuk repo, git config (terutama dengan --global) adalah pengaturan per pengguna."

99% dari sistem waktu dan opsi yang tersedia berfungsi dengan baik.

Kecuali ketika Anda berbagi sistem file antara Linux dan Windows. Saya menggunakan Windows 10 dan Ubuntu (melalui WSL) dan menyimpan barang-barang di /mnt/c/github.

Namun, jika saya menarik dari Windows 10 saya mendapatkan CRLF dan jika saya menarik dari Linux saya dapat LF jadi maka skrip shell saya MUNGKIN ATAU TIDAK BEKERJA saat berada di Ubuntu.

Saya telah memilih untuk membuat file .gitattributes yang mengatur skrip shell dan skrip PowerShell ke LF. Dengan cara ini skrip-skrip tersebut dapat digunakan dan dibagikan serta MENJALANKAN antar sistem.

*.sh eol=lf
*.ps1 eol=lf

Anda punya banyak pilihan. Sekali lagi 99% dari waktu autocrlf adalah hal yang benar.

Dari dokumen GitHub:

Anda akan melihat bahwa file-file tersebut cocok--*.c , *.sln , *.png --, dipisahkan dengan spasi, lalu diberi setting--text , text eol=crlf , binary . Kami akan membahas beberapa kemungkinan pengaturan di bawah ini.

  • text=auto
    • Git akan menangani file dengan cara apa pun yang dianggap terbaik. Ini adalah opsi default yang bagus.
  • text eol=crlf
    • Git akan selalu mengonversi akhir baris menjadi CRLF di kasir. Anda harus menggunakan ini untuk file yang harus menyimpan CRLF akhir, bahkan di OSX atau Linux.
  • text eol=lf
    • Git akan selalu mengonversi akhir baris menjadi LF di kasir. Anda harus menggunakan ini untuk file yang harus menyimpan akhiran LF, bahkan di Windows.
  • binary
    • Git akan memahami bahwa file yang ditentukan bukanlah teks, dan Git tidak boleh mencoba mengubahnya. *.sln pengaturan juga merupakan alias untuk -text -diff .

Sekali lagi, defaultnya mungkin benar. TAPI - jika Anda melakukan hal-hal aneh, berbagi file atau sistem file di seluruh sistem operasi maka Anda harus waspada.

Edward Thomson, salah satu pengelola libgit2, mengatakan ini dan mengarahkan kami ke postingan blognya di Line Endings.

Saya akan mengatakan ini lebih kuat. Karena `core.autocrlf` dikonfigurasi dalam cakupan per pengguna, tetapi memengaruhi cara kerja seluruh repositori, `.gitattributes` harus _selalu_ digunakan.

Jika Anda mengalami masalah, itu mungkin akhir baris. Rekomendasi Edward adalah bahwa SEMUA proyek memeriksa .gitattributes.

Kunci untuk menangani akhir baris adalah memastikan konfigurasi Anda di-commit ke repositori, menggunakan .gitattributes . Bagi kebanyakan orang, ini semudah membuat file bernama .gitattributes di root repositori Anda yang berisi satu baris:
* text=auto

Semoga membantu!

* Mesin tik oleh Matunos digunakan di bawah Creative Commons

Sponsor: Lihat JetBrains Rider:.NET IDE lintas platform. Edit, refactor, uji dan debug aplikasi ASP.NET, .NET Framework, .NET Core, Xamarin atau Unity. Pelajari lebih lanjut dan unduh uji coba 30 hari!


Linux
  1. 6 sumber daya dan 3 tips untuk membantu Anda memasuki dunia container Linux

  2. Kelanjutan Baris Bash Setelah &&Dan || Didokumentasikan?

  3. $bashpid Dan $$ Berbeda Dalam Beberapa Kasus?

  1. 8 tips untuk baris perintah Linux

  2. Pemecahan Masalah Jaringan Linux Dan Debugging?

  3. 8 Tip dan Trik Baris Perintah MySQL Teratas

  1. 10 Trik dan Tips Baris Perintah Linux Menarik yang Patut Diketahui

  2. Kiat navigasi baris perintah Linux:dasar-dasar perintah pushd dan popd

  3. Tip dan trik .htaccess Linux