Haruskah * .xccheckout file di Xcode5 diabaikan di bawah VCS?

157

Apple telah memperkenalkan jenis file terkait proyek baru di Xcode 5: "xccheckout".

File ini terletak di direktori ".xcodeproj / project.xcworkspace / xcshareddata /", dan sepertinya itu terkait dengan sistem kontrol versi proyek.

Contoh file ada di sini: http://pastebin.com/5EP63iRa

Saya kira jenis file ini harus diabaikan di bawah VCS, tapi saya tidak yakin.

Jadi inilah pertanyaannya:

  1. Haruskah "xccheckout" diabaikan?
  2. Apa tujuannya?
Artem Abramov
sumber
Pertanyaan ini cenderung sangat relevan; jadi saya ingin itu menjadi lebih tepat secara tata bahasa dan sintaksis. Jika Anda penutur asli bahasa Inggris atau Anda sangat fasih berbahasa Inggris, saya ingin meminta bantuan untuk memeriksa bahasa saya. Terima kasih!
Artem Abramov
1
Minor menyarankan perubahan: "Apple telah memperkenalkan yang baru", "Contoh file ada di sini:". Ada kutipan yang tidak cocok dalam pertanyaan 1.
Sofi Software LLC
3
Saya selalu merujuk ke repo github / gitignore untuk mengetahui file mana yang harus diabaikan -> github.com/github/gitignore/blob/master/Objective-C.gitignore
eliocs

Jawaban:

109

Anda harus memeriksa dalam .xccheckoutfile Xcode 5 ; secara umum, file dalam xcshareddataharus dikomit.

Sebuah .xccheckoutfile berisi metadata tentang apa repositori yang digunakan dalam ruang kerja. Untuk satu proyek dalam satu repositori yang tidak membuat banyak perbedaan. Tetapi jika Anda menggunakan ruang kerja yang memiliki beberapa proyek dari repositori yang berbeda, keberadaan .xccheckoutfile di ruang kerja memungkinkan Xcode mengetahui semua komponen yang membentuk ruang kerja dan di mana mendapatkannya.

Chris Hanson
sumber
8
Jika itu tidak dimaksudkan untuk dibagikan, Apple akan menyimpannya .xcuserdatasehingga harus dimasukkan.
Joshcodes
4
Seperti yang saya katakan dalam jawaban saya, file xccheckout berisi informasi untuk semua repositori yang digunakan di ruang kerja. Itulah masalahnya terlepas dari apa sistem SCM yang mereka gunakan - ruang kerja seperti itu bisa dalam svn atau git, dan proyek-proyeknya dapat dalam campuran repositori svn dan git.
Chris Hanson
72
Sepertinya xccheckout berisi kunci dan nama yang spesifik untuk setiap mesin pengembang ... Begitu saya menjalankan xcode, ia mengubah beberapa kunci dalam file, dan itu mengubah sesuatu yang disebut IDESourceControlWCCName dari <string> OurCompanyAPI </string> menjadi <string > our_company_api / string> - yang terakhir adalah nama yang saya gunakan saat kloning repo. Jika file ini seharusnya dibagikan, maka Apple telah melakukan pekerjaan yang sangat buruk.
Herr Grumps
7
Ketika kami memeriksa file ini, semua rekan kerja saya mendapatkan IDESourceControlProjectIdentifier yang berbeda ... jadi .xccheckout kami dapat dimodifikasi dengan setiap komit. -_-
Cœur
9
Terlepas dari apa yang awalnya dimaksudkan untuk Apple, .xccheckoutfile-file tersebut menyebabkan beberapa masalah gila pada Xcode 6 beta, dan saya memutuskan untuk menghapusnya dari VCS. Tampaknya terkait dengan beberapa bug caching, dan saya percaya Xcode dapat membuat ulang mereka dari VCS secara otomatis, untuk setiap waktu.
eonil
63

The *.xccheckoutfile berisi VCS metadata, dan seharusnya tidak diperiksa ke VCS.

Di sisi lain: memeriksa file ini mungkin tidak akan membuat kesulitan menggabungkan atau masalah lainnya.

Jika Anda ingin mengabaikan file ini (yang saya sarankan), Anda harus menambahkan baris ini ke proyek Anda .gitignore:

*.xccheckout

Abizern 's solusi tidak akan bekerja untuk proyek-proyek di dalam ruang kerja. Karena, ketika Anda menggunakan ruang kerja, path ke *.xccheckoutfile akan: <workspace-name>.xcworkspace/xcshareddata/<workspace-name>.xcchekout. Dan sebenarnya mengabaikan lebih dari yang Anda inginkan.

Sunting: File ini ada untuk mengelola pengetahuan Xcode tentang kemungkinan banyak sistem VCS di proyek Anda, lihat jawaban Chris Hanson . Untuk> 99% proyek, file .xccheckout adalah konfigurasi berlebihan.

Berik
sumber
1
Akan luar biasa jika Anda dapat memperluas pernyataan ini "sebenarnya mengabaikan lebih dari yang Anda inginkan". Secara khusus, beberapa contoh file lain yang masuk ke folder itu yang harus diperiksa.
Mark Edington
Tindak lanjut: Saya menggunakan .gitignore dari Adam dari pertanyaan ini . Ini tersedia sebagai intisari dan memiliki beberapa deskripsi isi folder xcshareddata.
Mark Edington
@ Mark : Mengabaikan project.xcworkspace/. Itu mungkin oke untuk saat ini, tapi saya tidak akan mengandalkan itu untuk versi Xcode baru.
Berik
6
Jawaban ini salah, dan standar GitHub .gitignoreyang diberikannya kepada pengembang tidak boleh ditentukan*.xccheckout
Chris Hanson
2
Setelah memasukkan file ini ke dalam repos saya sejak diperkenalkan, saya baru-baru ini mulai menghapusnya dari semua repos saya. Hal ini menciptakan konflik penggabungan sepanjang waktu, sebagian besar dalam proyek-proyek yang memasukkan kerangka kerja saya sendiri sebagai submodul. Dan kemudian saya mendapatkan apa-apa dari file ini karena saya menggunakan git untuk manajemen submodule. Usaha yang bagus, Apple, terima kasih, tapi tidak, terima kasih.
Pascal
38

Tergantung. File tersebut berisi referensi ke repositori jarak jauh yang Anda gunakan. Jika Anda menggunakan VCS terpusat seperti Perforce atau Subversion, repositori jarak jauh semua orang akan sama sehingga Anda dapat dan harus memeriksa file tersebut.

Jika Anda menggunakan VCS terdistribusi seperti Mercurial atau git, tetapi menggunakannya seolah-olah itu adalah CVCS (dengan kata lain, semua orang dikloning dari repositori bersama langsung ke ruang kerja pribadi mereka di mesin mereka) maka Anda mungkin masih ingin memeriksanya di.

Namun, jika Anda menggunakan DVCS dengan semua orang memiliki klon jarak jauh mereka sendiri, misalnya menggunakan GitHub dalam pola penggunaan standarnya, Anda TIDAK ingin memeriksa file ini. Jika Anda melakukannya, Permintaan Tarik Anda akan meminta pengaturan repositori Anda untuk disalin ke file xcchout orang lain, tetapi pengaturan repositori Anda akan berbeda dari yang lain karena Anda semua menggunakan repositori jarak jauh yang berbeda.

Tim Band
sumber
1
Bagi saya, jawaban ini yang terbaik. Memeriksa mereka menyebabkan kegelisahan yang tidak perlu pada diff untuk komitmen tim kami. Saya menambahkan .gitignore berikut ini untuk mencegah mereka: * / .xcworkspace / xcshareddata / *. Xccheckout Saya masih tidak mengerti mengapa Apple memilih untuk menyimpan informasi ini secara berlebihan yang tetap ada di dalam folder .git (satu-satunya tebakan saya adalah buat semuanya bekerja secara konsisten di seluruh VCS)
Juan Carlos Méndez
20

Ya, Project.xccheckoutfile tersebut harus dikomit ke repositori Anda. Xcode menggunakan file ini untuk memberi tahu orang lain yang membuka ruang kerja seluruh daftar repositori kontrol sumber yang digunakan oleh ruang kerja dan lokasi copy pekerjaan relatif terhadap ruang kerja, apakah repositori tersebut adalah Git, SVN, atau keduanya.

Saat Anda membuka ruang kerja, Xcode menggunakan Project.xccheckoutfile untuk memberi tahu pengguna bahwa ada repositori lain yang membentuk bagian dari ruang kerja, dan menanyakan yang mana yang harus diperiksa. Saat memeriksa repositori tambahan, Xcode menempatkan copy pekerjaan dalam struktur folder relatif-kerja yang sama seperti ketika Project.xccheckoutfile dihasilkan.

Seperti yang dikatakan Chris Hanson , mungkin tidak masalah untuk repositori tunggal, satu-proyek ruang kerja, tetapi untuk urusan yang lebih kompleks itu akan sangat berguna.

Anda dapat mengetahui lebih lanjut tentang ini di video sesi WWDC 2013 Memahami Kontrol Sumber di Xcode ; porsi yang relevan dimulai sekitar 15 menit.

Calrion
sumber
File ini hanya berguna jika Anda menggunakan Xcode untuk SCM, jika tidak, Anda tidak perlu file itu sama sekali. Dan apalagi jika Anda bekerja dengan garpu git, dalam hal ini, jalur repo akan menjadi unik per pengembang
Carlos Ricardo
3

Ini yang saya miliki di .gitignore saya untuk Xcode.

#Xcode
*.xcuserstate
project.xcworkspace/
xcuserdata/

Itu membuat segala sesuatu yang berhubungan dengan keadaan lokal dari cara proyek mencari saya keluar dari repositori.

File xccheckout ada di bawah sini sehingga tidak dilacak di sistem saya secara default.

Xcode telah menjadi lebih baik dan memisahkan apa yang perlu dibagikan dan apa yang perlu disimpan secara lokal. Sebagai contoh; baris-baris ini akan mengabaikan skema build default, yang baik-baik saja karena Anda dapat menandai skema build tertentu sebagai dibagikan, dan mereka diletakkan di direktori yang tidak diabaikan.

Breakpoint diabaikan, tetapi Anda dapat menandai breakpoint tertentu sebagai dibagikan di seluruh proyek dan mereka juga ditempatkan di direktori yang tidak diabaikan.

Abizern
sumber