Saya memiliki banyak file dalam changeset, tetapi saya ingin secara khusus mengabaikan satu file yang dimodifikasi. Terlihat seperti ini setelah git status
:
# modified: main/dontcheckmein.txt
# deleted: main/plzcheckmein.c
# deleted: main/plzcheckmein2.c
...
Apakah ada cara yang bisa saya lakukan git add
tetapi abaikan saja satu file teks yang tidak ingin saya sentuh? Sesuatu seperti:
git add -u -except main/dontcheckmein.txt
main/*
, perlu menambahkan--
di depannya untuk memberi tahu git bahwa itu adalah path. Dua varian lainnya berfungsi tanpa menyertakan dua tanda hubung. (Diuji di command prompt pada Windows 7 dengan msysGit)git reset
untuk folder-folder itu sesudahnya masih akan berfungsi, tetapi akan butuh waktu lama untuk menambahkan folder besar.1) Untuk mulai mengabaikan perubahan pada satu file yang sudah diversi
dan untuk membatalkannya
git update-index --no-assume-unchanged "main/dontcheckmein.txt"
github docs untuk mengabaikan file
2) Untuk benar-benar mengabaikan satu file tertentu yang mencegahnya dibuat di repositori
Pertama, lihat posting stackoverflow ini: Git global diabaikan tidak berfungsi
Di
.gitignore
, tambahkan path relatif ke file tanpa memimpin./
.Jadi, jika file Anda di
MyProject/MyFolder/myfile.txt
, (di mana.git
juga diMyProject
folder), tambahkanMyFolder/myfile.txt
ke.gitignore
file Anda di .Anda dapat mengonfirmasi aturan apa yang dikaitkan dengan pengabaian via
git check-ignore "MyFolder/myfile.txt"
Tentang pengabaian global
Tautan itu berbicara tentang
~/.gitignore_global
, tetapi file tersebut terkait dengan proyek Anda. Jadi, jika Anda meletakkan mengecualikan polaMyFolder/myfile.txt
di~/.gitignore_global
, ia akan bekerja tetapi tidak akan masuk akal ...Di sisi lain, jika Anda mengatur proyek Anda dengan di
git config core.excludesfile .gitignore
mana.gitignore
beradaMyProject
, file lokal akan menimpa~/.gitignore_global
, yang dapat memiliki aturan yang sangat berguna ...Jadi, untuk saat ini, saya pikir yang terbaik adalah membuat beberapa skrip untuk mencampur
.gitignore
dengan Anda~/.gitignore_global
di.gitignore
.Satu peringatan terakhir
Jika file yang ingin Anda abaikan sudah ada dalam repositori, metode ini tidak akan berfungsi kecuali jika Anda melakukan ini:,
git rm "MyFolder/myfile.txt"
tetapi cadangkan terlebih dahulu, karena akan dihapus secara lokal juga! Anda dapat menyalinnya kembali nanti ...sumber
git rm --cached MyFolder/myyfile.txt
untuk menghapus file dari repositori tetapi menyimpannya secara lokal. Penjelasan di help.github.comUntuk File
Untuk folder
sumber
git add . && git reset -- main/*
?git push origin master
di push berikutnya, adilgit push
dan git akan tahu bahwa itu ada di cabang utama. Semoga ini bisa membantu.Sekarang
git
didukungexclude certain paths and files
oleh pathspec magic:(exclude)
dan bentuk pendeknya:!
. Jadi Anda dapat dengan mudah mencapainya sebagai perintah berikut.Sebenarnya Anda dapat menentukan lebih banyak:
sumber
:!...
klausa agar shell tidak mengeluh. Jadi, misalnya:git add --all -- ':!path/to/file1' ':!path/to/file2' ':!path/to/folder1/*'
.:!/path/to/(file1|file2)
?Sementara Ben Jackson benar, saya pikir saya akan menambahkan bagaimana saya telah menggunakan solusi itu juga. Di bawah ini adalah skrip yang sangat sederhana yang saya gunakan (yang saya sebut gitadd) untuk menambahkan semua perubahan kecuali beberapa pilihan yang saya simpan dalam file bernama
.gittrackignore
(sangat mirip dengan cara .gitignore bekerja).Dan inilah yang
.gittrackignore
terlihat seperti saat ini .Saya sedang mengerjakan proyek Android yang saya kompilasi dari baris perintah ketika menggunakan. Proyek ini tergantung pada SherlockActionBar, jadi itu perlu direferensikan di project.properties, tetapi itu mengacaukan kompilasi, jadi sekarang saya cukup mengetik
gitadd
dan menambahkan semua perubahan ke git tanpa harus menghapus project.properties setiap saat.sumber
--
terjadi sampai komentar Anda. Menurut halaman manual, ini opsional dan tidak mengubah hasil dari perintah (setidaknya dalam kasus ini). Pertanyaan ini tampaknya mendukung hal itu, stackoverflow.com/questions/17800994/… . Koreksi saya jika saya salah, tetapi tampaknya itu berarti "memperlakukan apa pun setelah--
sebagai argumen, bukan opsi / switch"--
digit checkout
saya lihat di pertanyaan itu. Saya tidak tahu apa dasbor ganda sampai pertukaran kita juga. Saya bertanya-tanya apakahgit checkout
ambiguitas antara cabang dan file dapat mempengaruhi, dalam bentuk ini atau yang berbeda,git reset
juga.Untuk menyimpan perubahan dalam file tetapi tidak untuk melakukan saya melakukan ini
git add .
git reset -- main/dontcheckmein.txt
git commit -m "commit message"
untuk memverifikasi file dikecualikan lakukan
git status
sumber
Gunakan
git add -A
untuk menambahkan semua file yang dimodifikasi dan baru ditambahkan sekaligus.Contoh
sumber
sumber
Coba ini:
sumber
Untuk kasus khusus dalam pertanyaan, cara termudah adalah dengan menambahkan semua file dengan ekstensi .c dan tinggalkan yang lainnya:
Dari git-scm (atau / dan
man git add
):Perhatikan bahwa ini berarti Anda juga dapat melakukan sesuatu seperti:
untuk menambahkan semua file (yang tidak diabaikan) yang ada di
main
folder. Anda bahkan bisa menjadi liar dengan pola yang lebih rumit:Di atas akan menambahkan semua file yang ada di
s(any char)c
folder dan memilikiService
nama file di suatu tempat.Jelas, Anda tidak terbatas pada satu pola per perintah. Artinya, Anda bisa meminta git untuk menambahkan semua file yang memiliki ekstensi .c dan .h :
Tautan ini mungkin memberi Anda beberapa ide pola glob.
Saya merasa ini sangat berguna ketika saya membuat banyak perubahan, tetapi masih ingin komitmen saya untuk tetap atom dan mencerminkan proses bertahap daripada campur aduk perubahan yang mungkin saya kerjakan saat itu. Tentu saja, pada titik tertentu biaya untuk membuat pola yang rumit melebihi biaya menambahkan file dengan metode yang lebih sederhana, atau bahkan satu file pada satu waktu. Namun, sebagian besar waktu saya dengan mudah dapat menunjukkan dengan tepat file yang saya butuhkan dengan pola sederhana, dan mengecualikan yang lainnya.
Ngomong-ngomong, Anda mungkin perlu mengutip pola glob Anda agar bisa berfungsi, tetapi ini tidak pernah terjadi pada saya.
sumber
Saya menggunakan
git add --patch
sedikit dan ingin sesuatu seperti ini untuk menghindari keharusan memukul dsepanjang waktu melalui file yang sama. Saya membuat beberapa alias git yang sangat rumit untuk menyelesaikan pekerjaan:Dalam kasus saya, saya hanya ingin mengabaikan file kecil tertentu sepanjang waktu, tetapi Anda dapat membuatnya menggunakan variabel lingkungan seperti
$GIT_EXCLUDE_PATTERN
untuk kasus penggunaan yang lebih umum.sumber
Perubahan yang harus dilakukan: (gunakan "git reset HEAD ..." untuk unstage)
sumber
Anda dapat mencoba ini:
git add * && git reset main/dontcheckmein.txt
sumber