Saya punya proyek yang saya gunakan untuk Heroku . Pohon kode sumber mencakup banyak file mp3 (situs web ini akan digunakan untuk proyek rekaman yang sangat saya ikuti).
Saya ingin meletakkan kode sumbernya di GitHub , tetapi GitHub memiliki batas 300 MB pada akun gratis mereka. Saya tidak ingin menggunakan 50 MB dari batas saya pada banyak file mp3. Jelas, saya bisa menambahkannya ke .gitignore
file untuk menjaga mereka dari repo saya.
Namun, saya menggunakan Heroku menggunakan git push heroku
. File mp3 harus ada di cabang saya mendorong ke Heroku sehingga mereka bisa digunakan.
Idealnya, saya ingin .gitignore
file mp3 di cabang master lokal saya sehingga ketika saya mendorongnya ke GitHub, mp3 tidak termasuk. Maka saya akan menjaga cabang produksi lokal yang memiliki mp3 berkomitmen daripada diabaikan. Untuk menggunakan, saya akan menggabungkan master ke dalam produksi, dan kemudian mendorong cabang produksi ke Heroku.
Saya tidak bisa melakukan ini dengan benar.
Ini adalah contoh dari apa yang saya coba lakukan ...
$ git init git-ignore-test
$ cd git-ignore-test
$ echo "*.ignored" >> .gitignore
$ git add .gitignore && git commit -m "Ignore .ignored files"
$ touch Foo.ignored
Pada titik ini, Foo.ignored diabaikan di cabang master saya, tetapi masih ada, sehingga proyek saya dapat menggunakannya.
$ git checkout -b unignored
$ cat /dev/null > .gitignore
$ git add Foo.ignored .gitignore && git commit -m "Unignore .ignored files"
Sekarang saya punya cabang dengan file-file ini dilakukan, seperti yang saya inginkan. Namun, ketika saya beralih kembali ke cabang master saya, Foo.ignored hilang.
Adakah yang punya saran untuk cara yang lebih baik untuk mengatur ini?
Sunting: hanya untuk memperjelas, saya ingin file mp3 hadir di kedua cabang sehingga ketika saya menjalankan situs secara lokal (menggunakan salah satu cabang) situs berfungsi. Saya hanya ingin file diabaikan dalam satu cabang jadi ketika saya mendorong ke GitHub mereka tidak didorong juga. Biasanya .gitignore berfungsi dengan baik untuk hal semacam ini (yaitu menyimpan salinan file lokal yang tidak dimasukkan dalam push ke remote), tetapi ketika saya beralih ke cabang dengan file-file yang diperiksa, dan kemudian kembali ke cabang dengan file diabaikan, file hilang.
Jawaban:
Saya menulis posting blog tentang cara efektif menggunakan
excludesfile
untuk cabang yang berbeda, seperti satu untuk github publik dan satu untuk penyebaran heroku.Inilah yang cepat dan kotor:
kemudian dalam file .git / config tambahkan baris ini:
Sekarang semua hal abaikan global ada dalam
info/exclude
file dan cabang spesifik ada diinfo/exclude_from_public_viewing
Semoga itu bisa membantu!
http://cogniton-mind.tumblr.com/post/1423976659/howto-gitignore-for-different-branches
sumber
git init
, ...), dan versi Git yang Anda gunakan?Petunjuk penting : Jawaban yang diterima oleh Cognition.Mind tidak bekerja (lagi, untuk beberapa tahun sekarang, atau mungkin untuk versi vanilla git); lihat komentar. Jawaban dan solusi yang valid dapat ditemukan di sini:
https://stackoverflow.com/a/29583813/2157640
Solusi alternatif lain (bekerja untuk masalah khusus saya, tetapi menuntut operasi simpanan manual atau implementasi hook) akan menjadi
git stash -u -a
. Ini membosankan ketika perbedaannya besar.Dan akhirnya, solusi yang saya gunakan sekarang adalah mem-forked VM saya yang kami gunakan dalam lingkungan pengembangan kami, dan mengaturnya dengan
info/excludes
tepat untuk cabang, masing-masing menghapus file / folder yang menyinggung, yang tidak dikomit.sumber
Saya akan sangat menyarankan untuk meletakkan file-file MP3 pada S3. Memiliki mereka menjadi bagian dari push Heroku Anda (dan dengan demikian bagian dari siput Heroku Anda) akan sangat memperlambat waktu startup dyno Anda. Karena Heroku menggunakan EC2, jika file pada S3 dan hanya diakses oleh aplikasi Anda (jika pengguna tidak terhubung langsung ke S3) Anda bahkan tidak akan membayar biaya bandwidth, hanya biaya untuk menyimpan 50MB.
sumber
Katakanlah kita ingin mengabaikan
build
folder dari semua cabang lain kecualiproduction
cabang. Karena kami ingin mendorongbuild
folder dalam produksi.1) Jangan memasukkan
build
dalam .gitignore. Jika Anda melakukannya, itu akan selalu diabaikan untuk semua cabang.2) Buat file
exclude_from_public_viewing
di dalam./.git/info
folder (Folder ini sudah ada)touch ./.git/info/exclude_from_public_viewing
3) Di dalam
exclude_from_public_viewing
tulis satu baris (Ketika Anda mencoba untuk mengabaikanbuild
semua cabang).!build
4) Ada file yang ada
.git/info/exclude
. Kita perlu menambahkan baris berikut di dalamnya.Kami ingin mengabaikan
build
folder tetapi belum menambahkannya di .gitignore. Jadi bagaimana git akan tahu apa yang harus diabaikan? Jawabannya adalah kita menambahkannya keexclude
file dan secara kondisional mengirimkan file itugit config
5) Sekarang kita harus secara unignore
build
menghapus folder untukproduction
cabang. untuk melakukan itu lakukan berikut6) Ada file yang ada yang disebut
./.git/config
kita perlu menambahkan berikut -a) di
excludesfile = +info/exclude
bawah ini[core]
b) Buat bagian baru di akhir
./.git/config
asAda satu solusi alternatif yang cerdas. Katakanlah Anda ingin menambahkan
build/
folder diproduction
cabang dan abaikan di semua cabang lainnya.1) Tambahkan ke
gitignore
file Anda .2) Di cabang produksi, saat melakukan
git add
, paksa tambahkanbuild
folder:git add -f --all build/
sumber
branch.<name>.excludesfile
di git (lagi?), Hanya untukcore.excludesfile
, dan tes saya sendiri sepertinya menegaskan hal ini.git version 2.7.4 (Apple Git-66)
dan saya belum pernah menggunakanbranch.<name>.excludesfile
solusi saya.Sudahkah Anda mencoba .gitignore berbeda di cabang Anda?
Anda harus dapat mengabaikan apa yang Anda inginkan berdasarkan cabang Anda selama file tidak dilacak di cabang itu.
sumber
1. Ringkasan
Saya tambahkan ke
.travis.yml
:Di mana
misc
- folder apa pun, berisi folder lain.gitignore
.mv
UNIX memindahkan file perintah ; Timpa, jika file sudah ada.Ketika Travis CI menyebarkan proyek, Travis CI tidak akan mendorong untuk menyebarkan file dan folder penyedia , yang mengabaikan
misc/.gitignore
(bukan dalam.gitignore
sumber asli).2. Keterbatasan
3. Relevansi
Jawaban ini relevan untuk April 2018. Di masa mendatang, data dari jawaban ini mungkin sudah usang.
4. Demonstrasi
proyek saya yang sebenarnya .
Contoh penerapan yang sukses .
4.1. Tugas
Saya menyebarkan proyek saya dari cabang src ke cabang dest dari repositori yang sama.
Saya ingin, file itu
PaletteMira.suricate-profile
:Jika saya benar mengerti pertanyaan penulis, ia memiliki tugas yang sama.
4.2. src
cabang sumber - SashaYAML .
Bagian dari
.travis.yml
:Bagian dari
.gitignore
:Bagian dari
misc/.gitignore
*.suricate-profile
tidakmisc/.gitignore
.PaletteMira.suricate-profile
tidak ada di cabang ini dari jarak jauh, tetapi ada secara lokal.4.3. dest
cabang tujuan - SashaDevelop
Bagian dari
.gitignore
:*.suricate-profile
tidakmisc/.gitignore
.PaletteMira.suricate-profile
ada untuk cabang ini dari jarak jauh dan lokal.4.4. Langkah-langkah mereproduksi
Saya mengaktifkan repositori PaletteMira GitHub untuk Travis CI → Saya mengatur variabel lingkungan
$GITHUB_TOKEN
dengan nilai - token GitHub saya→ Saya membuat komit ke cabang src saya.Jika tidak ada kesalahan, saya harus mendapatkan perilaku yang diharapkan .
sumber
Bisakah Anda berkomitmen dan mendorong dari Heroku?
mis. Tambah audio, dorong ke github dan masuk ke heroku, hapus file pada copy pekerjaan di Heroku. Hapus audio dari repo tetapi tidak dari disk, lalu dorong kembali perubahan itu ke github.
sumber
Github sekarang memiliki dukungan untuk penyimpanan file besar, lihat lebih lanjut di sini https://git-lfs.github.com/
sumber