GoGPT Best VPN GoSearch

Favicon OnWorks

git-filter-branch - Dalam talian di Awan

Jalankan git-filter-branch dalam penyedia pengehosan percuma OnWorks melalui Ubuntu Online, Fedora Online, emulator dalam talian Windows atau emulator dalam talian MAC OS

Ini ialah arahan git-filter-branch yang boleh dijalankan dalam penyedia pengehosan percuma OnWorks menggunakan salah satu daripada berbilang stesen kerja dalam talian percuma kami seperti Ubuntu Online, Fedora Online, emulator dalam talian Windows atau emulator dalam talian MAC OS.

JADUAL:

NAMA


git-filter-branch - Tulis semula cawangan

SINOPSIS


pergi cawangan penapis [--env-filter ] [--penapis pokok ]
[--penapis indeks ] [--penapis ibu bapa ]
[--msg-filter ] [--commit-filter ]
[--tag-nama-penapis ] [--penapis-subdirektori ]
[--pangkas-kosong]
[--asal ] [-d ] [-f | --force]
[--] [ ...]

DESCRIPTION


Membolehkan anda menulis semula sejarah semakan Git dengan menulis semula cawangan yang disebut dalam
options>, menggunakan penapis tersuai pada setiap semakan. Penapis tersebut boleh mengubah suai setiap pokok
(cth mengalih keluar fail atau menjalankan penulisan semula perl pada semua fail) atau maklumat tentang setiap fail
komited. Jika tidak, semua maklumat (termasuk masa komit asal atau maklumat gabungan)
akan dipelihara.

Perintah itu hanya akan menulis semula positif rujukan yang disebut dalam baris arahan (cth. jika anda
lulus a..b, hanya b akan ditulis semula). Jika anda tidak menentukan penapis, komitmen akan menjadi
komited semula tanpa sebarang perubahan, yang biasanya tidak akan memberi kesan. Namun begitu, ini
mungkin berguna pada masa hadapan untuk mengimbangi beberapa pepijat Git atau seumpamanya, oleh itu a
penggunaan adalah dibenarkan.

NOTA: Perintah ini menghormati fail .git/info/grafts dan rujukan dalam ruang nama refs/replace/.
Jika anda mempunyai sebarang cantuman atau rujukan gantian yang ditentukan, menjalankan arahan ini akan menjadikannya
kekal.

BERKHATAN :! Sejarah yang ditulis semula akan mempunyai nama objek yang berbeza untuk semua objek dan
tidak akan menumpu dengan cawangan asal. Anda tidak akan dapat dengan mudah menolak dan
edarkan cawangan yang ditulis semula di atas cawangan asal. Tolong jangan gunakan ini
perintah jika anda tidak mengetahui implikasi penuh, dan elakkan menggunakannya, jika mudah
komitmen tunggal sudah memadai untuk menyelesaikan masalah anda. (Lihat "PULIH DARI HINGGA
REBASE" bahagian dalam git-rebase(1) untuk maklumat lanjut tentang penulisan semula diterbitkan
sejarah.)

Sentiasa sahkan bahawa versi yang ditulis semula adalah betul: Rujukan asal, jika berbeza daripada
yang ditulis semula, akan disimpan dalam ruang nama rujukan/asal/.

Ambil perhatian bahawa kerana operasi ini sangat mahal I/O, mungkin idea yang baik untuk mengubah hala
direktori sementara di luar cakera dengan -d pilihan, cth pada tmpfs. Khabarnya kelajuan
amat ketara.

Penapis
Penapis digunakan dalam susunan seperti yang disenaraikan di bawah. The hujah sentiasa
dinilai dalam konteks shell menggunakan menipu perintah (dengan pengecualian ketara
commit penapis, atas sebab teknikal). Sebelum itu, pembolehubah persekitaran $GIT_COMMIT
akan ditetapkan untuk mengandungi id komit yang sedang ditulis semula. Juga, GIT_AUTHOR_NAME,
GIT_AUTHOR_EMAIL, GIT_AUTHOR_DATE, GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL dan
GIT_COMMITTER_DATE diambil daripada komit semasa dan dieksport ke persekitaran, dalam
untuk menjejaskan identiti pengarang dan komitter bagi komit pengganti yang dicipta oleh
git-commit-tree(1) selepas penapis telah dijalankan.

Jika ada penilaian terhadap mengembalikan status keluar bukan sifar, keseluruhan operasi akan menjadi
digugurkan.

A peta fungsi tersedia yang mengambil hujah "id sha1 asal" dan mengeluarkan a
"id sha1 ditulis semula" jika komit telah ditulis semula dan "id sha1 asal"
sebaliknya; yang peta fungsi boleh mengembalikan beberapa id pada baris berasingan jika penapis komit anda
mengeluarkan beberapa komitmen.

PILIHAN


--env-penapis
Penapis ini boleh digunakan jika anda hanya perlu mengubah suai persekitaran di mana komit
akan dilaksanakan. Khususnya, anda mungkin mahu menulis semula pengarang/penyusun
nama/e-mel/pembolehubah persekitaran masa (lihat git-commit-tree(1) untuk butiran). Jangan
lupa untuk mengeksport semula pembolehubah.

--penapis pokok
Ini ialah penapis untuk menulis semula pokok dan kandungannya. Hujah dinilai
dalam shell dengan direktori kerja ditetapkan kepada akar pokok yang diperiksa. Baru
tree kemudiannya digunakan seperti sedia ada (fail baharu ditambah secara automatik, fail yang hilang dialih keluar secara automatik
- fail .gitignore atau mana-mana yang lain tidak mengabaikan peraturan MEMILIKI APA-APA KESAN!).

--penapis indeks
Ini ialah penapis untuk menulis semula indeks. Ia serupa dengan penapis pokok tetapi begitu
jangan lihat pokok itu, yang menjadikannya lebih pantas. Kerap digunakan dengan git rm
--cached --ignore-unmatch ..., lihat CONTOH di bawah. Untuk kes berbulu, lihat git-kemas kini-
indeks(1).

--penapis ibu bapa
Ini ialah penapis untuk menulis semula senarai induk komit. Ia akan menerima ibu bapa
rentetan pada stdin dan akan mengeluarkan rentetan induk baharu pada stdout. Rentetan induk ialah
dalam format yang diterangkan dalam git-commit-tree(1): kosong untuk komit awal, "-p
parent" untuk komit biasa dan "-p parent1 -p parent2 -p parent3 ..." untuk gabungan
komited.

--mesg-penapis
Ini ialah penapis untuk menulis semula mesej komit. Hujah dinilai dalam
shell dengan mesej komit asal pada input standard; keluaran standardnya digunakan
sebagai mesej komit baharu.

--komit-penapis
Ini ialah penapis untuk melaksanakan komit. Jika penapis ini dinyatakan, ia akan menjadi
dipanggil bukannya pergi commit-tree perintah, dengan hujah dalam bentuk "
[(-ms )...]" dan mesej log pada stdin. Id komit dijangka
pada stdout.

Sebagai sambungan khas, penapis komit mungkin mengeluarkan berbilang id komit; kalau macam itu,
anak-anak yang ditulis semula daripada komitmen asal akan mempunyai mereka semua sebagai ibu bapa.

Anda boleh menggunakan peta fungsi kemudahan dalam penapis ini, dan kemudahan lain
fungsi juga. Contohnya, menelefon langkau_komit "$@" akan meninggalkan arus
commit (tetapi bukan perubahannya! Jika anda mahu itu, gunakan pergi melunaskan semula sebaliknya).

Anda juga boleh menggunakan git_commit_non_empty_tree "$@" dan bukannya git commit-tree "$@" jika
anda tidak mahu mengekalkan komitmen dengan ibu bapa tunggal dan itu tidak membuat perubahan kepada
pokok.

--tag-nama-penapis
Ini ialah penapis untuk menulis semula nama teg. Apabila diluluskan, ia akan dipanggil untuk setiap
tag ref yang menunjuk ke objek yang ditulis semula (atau ke objek tag yang menunjuk ke a
objek yang ditulis semula). Nama teg asal dihantar melalui input standard dan teg baharu
nama dijangka pada output standard.

Tag asal tidak dipadamkan, tetapi boleh ditimpa; gunakan "--tag-name-filter cat"
untuk mengemas kini tag sahaja. Dalam kes ini, berhati-hati dan pastikan anda mempunyai
teg lama disandarkan sekiranya penukaran telah berlaku.

Penulisan semula hampir tepat bagi objek teg disokong. Jika tag mempunyai mesej
dilampirkan, objek teg baharu akan dibuat dengan mesej yang sama, pengarang dan
cap masa. Jika teg mempunyai tandatangan yang dilampirkan, tandatangan itu akan dilucutkan. Ia adalah
mengikut definisi mustahil untuk mengekalkan tandatangan. Sebab ini "hampir" betul,
adalah kerana idealnya jika tag tidak berubah (menunjuk ke objek yang sama, mempunyai yang sama
nama, dsb.) ia harus mengekalkan sebarang tandatangan. Itu tidak berlaku, tandatangan akan
sentiasa dikeluarkan, pembeli berhati-hati. Juga tiada sokongan untuk menukar pengarang atau
cap waktu (atau mesej teg untuk perkara itu). Teg yang menghala ke teg lain akan menjadi
ditulis semula untuk menunjuk kepada komit asas.

--subdirektori-penapis
Lihat sahaja sejarah yang menyentuh subdirektori yang diberikan. Hasilnya akan mengandungi
direktori itu (dan hanya itu) sebagai akar projeknya. Menyiratkan bahagian yang dipanggil "Peta Semula
kepada nenek moyang”.

--pangkas-kosong
Beberapa jenis penapis akan menjana komitmen kosong, yang menyebabkan pokok itu tidak disentuh. ini
suis benarkan git-filter-branch mengabaikan komit tersebut. Padahal, suis ini sahaja
terpakai untuk komitmen yang mempunyai satu dan hanya satu induk, ia akan mengekalkan gabungan
mata. Juga, pilihan ini tidak serasi dengan penggunaan --komit-penapis. Walaupun
anda hanya perlu menggunakan fungsi tersebut git_commit_non_empty_tree "$@" bukannya git
simpulan bahasa "$@" commit-tree dalam penapis komit anda untuk mewujudkannya.

--asli
Gunakan pilihan ini untuk menetapkan ruang nama tempat komit asal akan disimpan. The
nilai lalai ialah rujukan/asal.

-d
Gunakan pilihan ini untuk menetapkan laluan ke direktori sementara yang digunakan untuk menulis semula. Bila
menggunakan penapis pokok, arahan itu perlu menyemak pokok itu buat sementara waktu
direktori, yang mungkin menggunakan ruang yang besar sekiranya projek besar. Secara lalai
ia melakukan ini dalam .git-rewrite/ direktori tetapi anda boleh mengatasi pilihan itu dengan ini
parameter.

-f, --force
pergi cawangan penapis enggan memulakan dengan direktori sementara yang sedia ada atau apabila ada
sudah menjadi rujukan bermula dengan rujukan/asal/, melainkan terpaksa.

...
Hujah untuk pergi senarai semula. Semua rujukan positif yang disertakan oleh pilihan ini ditulis semula.
Anda juga boleh menentukan pilihan seperti --semua, tetapi anda mesti menggunakan -- untuk memisahkan mereka daripada
yang pergi cawangan penapis pilihan. Menyiratkan bahagian yang dipanggil "Peta semula kepada nenek moyang".

Buat semula kepada nenek moyang
Dengan menggunakan senarai semula(1) hujah, contohnya, penghad laluan, anda boleh mengehadkan set semakan
yang akan ditulis semula. Walau bagaimanapun, rujukan positif pada baris arahan dibezakan: kami
jangan biarkan mereka dikecualikan oleh pengehad tersebut. Untuk tujuan ini, ia sebaliknya ditulis semula
untuk menunjuk kepada nenek moyang terdekat yang tidak dikecualikan.

CONTOH


Katakan anda ingin mengalih keluar fail (mengandungi maklumat sulit atau hak cipta
pelanggaran) daripada semua komit:

git filter-branch --tree-filter 'rm filename' HEAD

Walau bagaimanapun, jika fail itu tiada daripada pokok beberapa komit, nama fail rm mudah akan
gagal untuk pokok itu dan komited. Oleh itu anda mungkin mahu menggunakan nama fail rm -f sebagai
skrip.

Menggunakan --index-filter dengan pergi rm menghasilkan versi yang jauh lebih pantas. Seperti menggunakan rm
nama fail, git rm --cached filename akan gagal jika fail itu tiada daripada pokok a
komited. Jika anda ingin "melupakan sepenuhnya" fail, tidak kira bila ia masuk
sejarah, jadi kami juga menambah --ignore-unmatch:

git filter-branch --index-filter 'git rm --cached --ignore-unmatch filename' KEPALA

Sekarang, anda akan mendapat sejarah yang ditulis semula disimpan dalam HEAD.

Untuk menulis semula repositori untuk kelihatan seolah-olah foodir/ telah menjadi akar projeknya, dan buang semua
sejarah lain:

git filter-branch --subdirectory-filter foodir -- --semua

Oleh itu, anda boleh, contohnya, menukar subdirektori perpustakaan menjadi repositorinya sendiri. Perhatikan --
yang memisahkan cawangan penapis pilihan daripada pilihan semakan, dan --semua untuk menulis semula semua
cawangan dan tag.

Untuk menetapkan komitmen (yang biasanya berada di hujung sejarah lain) untuk menjadi induk kepada
komit awal semasa, untuk menampal sejarah lain di belakang sejarah semasa:

git filter-branch --parent-filter 'sed "s/^\$/-p /"' KEPALA

(jika rentetan induk kosong - yang berlaku apabila kita berurusan dengan komit awal
- tambahkan rasuah sebagai ibu bapa). Ambil perhatian bahawa ini menganggap sejarah dengan akar tunggal (itu
ialah, tiada percantuman tanpa nenek moyang yang sama berlaku). Jika ini tidak berlaku, gunakan:

git filter-branch --parent-filter \
'test $GIT_COMMIT = && bergema "-p " || KEPALA kucing

atau lebih sederhana:

echo "$commit-id $graft-id" >> .git/info/grafts
git penapis-cawangan $graft-id..KEPALA

Untuk mengalih keluar komit yang dikarang oleh "Darl McBribe" daripada sejarah:

git filter-branch --commit-filter '
jika [ "$GIT_AUTHOR_NAME" = "Darl McBribe" ];
kemudian
langkau_komit "$@";
lagi
git commit-tree "$@";
fi' KEPALA

Majlis tersebut langkau_komit ditakrifkan seperti berikut:

skip_commit()
{
syif;
manakala [ -n "$1" ];
do
syif;
peta "$1";
syif;
selesai;
}

Sihir anjakan mula-mula membuang id pokok dan kemudian parameter -p. Perhatikan bahawa ini
mengendalikan bergabung dengan betul! Sekiranya Darl melakukan penggabungan antara P1 dan P2, ia akan berlaku
disebarkan dengan betul dan semua kanak-kanak gabungan akan menjadi komit gabungan dengan P1,P2 sebagai
ibu bapa mereka dan bukannya komit gabungan.

NOTA perubahan yang diperkenalkan oleh komit, dan yang tidak dikembalikan oleh yang berikutnya
commits, masih akan berada dalam cabang yang ditulis semula. Kalau nak buang perubahan bersama-sama
dengan komitmen, anda harus menggunakan mod interaktif pergi melunaskan semula.

Anda boleh menulis semula mesej log komit menggunakan --msg-filter. Sebagai contoh, pergi svn-id
rentetan dalam repositori yang dibuat oleh pergi svn boleh dikeluarkan dengan cara ini:

git filter-branch --msg-filter '
sed -e "/^git-svn-id:/d"
'

Jika anda perlu menambah Acked-by baris kepada, katakan, 10 komitmen terakhir (tiada satu pun daripadanya adalah gabungan),
gunakan arahan ini:

git filter-branch --msg-filter '
kucing &&
echo "Acked-by: Bugs Bunny[e-mel dilindungi]>"
' KEPALA~10..KEPALA

Pilihan --env-filter boleh digunakan untuk mengubah suai identiti committer dan/atau pengarang. Untuk
contoh, jika anda mendapati bahawa komit anda mempunyai identiti yang salah kerana salah konfigurasi
user.email, anda boleh membuat pembetulan, sebelum menerbitkan projek, seperti ini:

git filter-branch --env-filter '
jika ujian "$GIT_AUTHOR_EMAIL" = "root@localhost"
kemudian
GIT_AUTHOR_EMAIL=[e-mel dilindungi]
eksport GIT_AUTHOR_EMAIL
fi
jika ujian "$GIT_COMMITTER_EMAIL" = "root@localhost"
kemudian
GIT_COMMITTER_EMAIL=[e-mel dilindungi]
eksport GIT_COMMITTER_EMAIL
fi
' -- --semua

Untuk mengehadkan penulisan semula kepada hanya sebahagian daripada sejarah, nyatakan julat semakan sebagai tambahan kepada
nama cawangan baru. Nama cawangan baharu akan menunjukkan semakan paling atas yang a pergi
senarai semula daripada julat ini akan dicetak.

Pertimbangkan sejarah ini:

D--E--F--G--H
/ /
A--B-----C

Untuk menulis semula hanya melakukan D,E,F,G,H, tetapi biarkan A, B dan C sahaja, gunakan:

git penapis-cawangan ... C..H

Untuk menulis semula komit E,F,G,H, gunakan salah satu daripada ini:

git penapis-cawangan ... C..H --bukan D
git penapis-cawangan ... D..H --bukan C

Untuk mengalihkan keseluruhan pokok ke dalam subdirektori, atau alih keluar dari sana:

git filter-branch --index-filter \
'git ls-files -s | sed "s-\t\"*-&newsubdir/-" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.baru \
git update-index --index-info &&
mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' KEPALA

CHECKLIST UNTUK MENGECUT A REPOSITORI


git-filter-branch boleh digunakan untuk menyingkirkan subset fail, biasanya dengan beberapa fail
gabungan --index-filter dan --subdirectory-filter. Orang ramai mengharapkan hasilnya
repositori menjadi lebih kecil daripada yang asal, tetapi anda memerlukan beberapa langkah lagi untuk benar-benar membuat
ia lebih kecil, kerana Git berusaha keras untuk tidak kehilangan objek anda sehingga anda memberitahunya. Pertama
pastikan bahawa:

· Anda benar-benar mengalih keluar semua varian nama fail, jika gumpalan telah dialihkan sepanjang hayatnya.
git log --name-only --follow --all -- nama fail boleh membantu anda mencari nama semula.

· Anda benar-benar menapis semua rujukan: gunakan --tag-name-filter cat --- --semua apabila memanggil
git-filter-cawangan.

Kemudian terdapat dua cara untuk mendapatkan repositori yang lebih kecil. Cara yang lebih selamat adalah dengan mengklon, itu tetap
asal anda utuh.

· Klonkannya dengan fail klon git:///path/to/repo. Klon tidak akan dialih keluar
objek. Lihat git-clone(1). (Perhatikan bahawa pengklonan dengan laluan biasa hanya memaut keras
segala-galanya!)

Jika anda benar-benar tidak mahu mengklonkannya, atas sebab apa pun, semak perkara berikut
sebaliknya (dalam susunan ini). Ini adalah pendekatan yang sangat merosakkan, jadi membuat a sandaran atau balik
untuk mengklonkannya. Anda telah diberi amaran.

· Alih keluar rujukan asal yang disandarkan oleh git-filter-branch: katakan git for-each-ref
--format="%(nama semula)" refs/original/ | xargs -n 1 git update-ref -d.

· Tamat tempoh semua reflog dengan git reflog tamat tempoh --expire=sekarang --semua.

· Sampah mengumpul semua objek yang tidak dirujuk dengan git gc --prune=now (atau jika git-gc anda ialah
tidak cukup baru untuk menyokong hujah untuk --prun, gunakan git repack -ad; git prune
sebaliknya).

NOTA


git-filter-branch membolehkan anda membuat penulisan semula skrip shell yang kompleks bagi sejarah Git anda,
tetapi anda mungkin tidak memerlukan fleksibiliti ini jika anda mudah mengeluarkan tidak diingini data seperti
fail besar atau kata laluan. Untuk operasi tersebut anda mungkin ingin pertimbangkan . BFG
Repo-Cleaner[1], alternatif berasaskan JVM kepada git-filter-branch, biasanya sekurang-kurangnya 10-50x
lebih pantas untuk kes penggunaan tersebut, dan dengan ciri yang agak berbeza:

· Mana-mana versi tertentu fail dibersihkan dengan tepat sekali. BFG, tidak seperti
git-filter-branch, tidak memberi anda peluang untuk mengendalikan fail secara berbeza
berdasarkan di mana atau bila ia dilakukan dalam sejarah anda. Kekangan ini memberikan
manfaat prestasi teras The BFG, dan sangat sesuai untuk tugas membersihkan keburukan
data - anda tidak peduli di mana data yang buruk ialah, anda hanya mahukannya pergi.

· Secara lalai BFG memanfaatkan sepenuhnya mesin berbilang teras, komitmen pembersihan
pokok fail secara selari. git-filter-branch cleans dilakukan secara berurutan (iaitu dalam a
cara berbenang tunggal), walaupun ia is mungkin untuk menulis penapis yang termasuk penapis mereka sendiri
selari, dalam skrip yang dilaksanakan terhadap setiap komit.

· The arahan pilihan[2] adalah lebih ketat daripada cawangan git-filter, dan berdedikasi
hanya untuk tugas mengalih keluar data yang tidak diingini- cth: --strip-blobs-lebih besar-daripada 1M.

GIT


Sebahagian daripada pergi(1) suite

NOTA


1. Pembersih Repo BFG
http://rtyley.github.io/bfg-repo-cleaner/

2. pilihan arahan
http://rtyley.github.io/bfg-repo-cleaner/#contoh

Gunakan git-filter-branch dalam talian menggunakan perkhidmatan onworks.net


Pelayan & Stesen Kerja Percuma

Muat turun apl Windows & Linux

Arahan Linux

Ad




×
Pengiklanan
❤ ️Beli, tempah atau beli di sini — tanpa kos, membantu memastikan perkhidmatan percuma.