Saya mengalami masalah aneh yang sepertinya tidak dapat saya selesaikan. Inilah yang terjadi:
Saya memiliki beberapa file log di repositori github yang tidak saya inginkan di sana. Saya menemukan skrip ini yang menghapus file sepenuhnya dari riwayat git seperti:
#!/bin/bash
set -o errexit
# Author: David Underhill
# Script to permanently delete files/folders from your git repository. To use
# it, cd to your repository's root and then run the script with a list of paths
# you want to delete, e.g., git-delete-history path1 path2
if [ $# -eq 0 ]; then
exit 0are still
fi
# make sure we're at the root of git repo
if [ ! -d .git ]; then
echo "Error: must run this script from the root of a git repository"
exit 1
fi
# remove all paths passed as arguments from the history of the repo
files=$@
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch $files" HEAD
# remove the temporary history git-filter-branch otherwise leaves behind for a long time
rm -rf .git/refs/original/ && git reflog expire --all && git gc --aggressive --prune
Saya, tentu saja, membuat backup terlebih dahulu dan kemudian mencobanya. Sepertinya bekerja dengan baik. Saya kemudian melakukan git push -f dan disambut dengan pesan berikut:
error: Unable to append to .git/logs/refs/remotes/origin/master: Permission denied
error: Cannot update the ref 'refs/remotes/origin/master'.
Semuanya tampaknya telah didorong dengan baik, karena file-file tersebut tampaknya hilang dari repositori GitHub, jika saya mencoba dan mendorong lagi saya mendapatkan hal yang sama:
error: Unable to append to .git/logs/refs/remotes/origin/master: Permission denied
error: Cannot update the ref 'refs/remotes/origin/master'.
Everything up-to-date
EDIT
$ sudo chgrp {user} .git/logs/refs/remotes/origin/master
$ sudo chown {user} .git/logs/refs/remotes/origin/master
$ git push
Everything up-to-date
Terima kasih!
EDIT
Uh oh. Masalah. Saya telah mengerjakan proyek ini sepanjang malam dan baru saja melakukan perubahan saya:
error: Unable to append to .git/logs/refs/heads/master: Permission denied
fatal: cannot update HEAD ref
Jadi saya:
sudo chown {user} .git/logs/refs/heads/master
sudo chgrp {user} .git/logs/refs/heads/master
Saya mencoba komit lagi dan saya mendapatkan:
error: Unable to append to .git/logs/HEAD: Permission denied
fatal: cannot update HEAD ref
Jadi saya:
sudo chown {user} .git/logs/HEAD
sudo chgrp {user} .git/logs/HEAD
Dan kemudian saya mencoba komit lagi:
16 files changed, 499 insertions(+), 284 deletions(-)
create mode 100644 logs/DBerrors.xsl
delete mode 100644 logs/emptyPHPerrors.php
create mode 100644 logs/trimXMLerrors.php
rewrite public/codeCore/Classes/php/DatabaseConnection.php (77%)
create mode 100644 public/codeSite/php/init.php
$ git push
Counting objects: 49, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (27/27), done.
Writing objects: 100% (27/27), 7.72 KiB, done.
Total 27 (delta 15), reused 0 (delta 0)
To [email protected]:IAmCorbin/MooKit.git
59da24e..68b6397 master -> master
Hore. Saya membuka http://GitHub.com dan memeriksa repositori, dan komit terbaru saya tidak ada di mana bisa ditemukan. :: garuk kepala :: Jadi saya dorong lagi:
Everything up-to-date
Umm ... tidak terlihat seperti itu. Saya belum pernah mengalami masalah ini sebelumnya, mungkinkah ini masalah dengan github? atau apakah saya mengacaukan sesuatu dengan proyek git saya?
EDIT
Tidak masalah, saya melakukan yang sederhana:
git push origin master
dan itu mendorong dengan baik.
sudo chown -R "$USER" .
dan tidak mengasumsikan kewarasan. :)USER
tidak dijamin oleh pubs.opengroup.org/onlinepubs/009695399/utilities/… , jadi mungkin lebih aman untuk digunakan"$(id -un)"
.is not in the sudoers file. This incident will be reported.
- ada tip tentang apa yang dapat saya lakukan? Terima kasih."${var:-default}"
meluas ke nilai variabel"$var"
, kecuali nilai itu kosong atau tidak disetel, dalam hal ini ditetapkan kedefault
. Jadi, kami memperluas ke"$USER"
, atau keluaran yang dihasilkan dengan menjalankanid -un
.Mari kita berkonsentrasi pada apa yang sebenarnya dikeluhkan:
Sebelum melakukan perubahan mod / kepemilikan rekursif, lewati jalan Anda ke file itu dan perbaiki izin yang salah.
Saya rasa saya menyebabkan masalah ini dengan membuat cabang saat saya root dan kemudian mencoba mengacaukan cabang itu sebagai pengguna saya.
sumber
Dalam kasus saya, saya membuat file dengan izin root secara lokal dan mencoba mendorong kode ke jarak jauh dengan izin lokal. Jadi saya menjalankan perintah ini
untuk mengetahui semua file yang memiliki "root" sebagai pemilik. Dan kemudian saya mengubah pemilik untuk semua file yang berada di bawah root ke lokal menggunakan perintah berikut
Kemudian saya bisa mendorong kode saya dari lokal ke jarak jauh.
sumber
sudo chown parineethat `find . -user root`
tidak dapat diandalkan - tidak akan berfungsi dengan baik dengan nama file dengan spasi. Sebaliknyasudo find . -user root -exec chown parineethat {} +
,. Lihat BashPitfalls # 1 untuk diskusi yang relevan.Ini akan mengubah semua file dan direktori .git Anda secara rekursif (dari root menjadi 1000) dan memberi Anda daftar lengkap dari semua perubahan yang dibuat di terminal.
sumber
Saya sudah mencoba memperbaiki kepemilikan untuk Git, tetapi tetap tidak berhasil.
Tapi, saya berhasil memperbaikinya dengan membuat cabang lokal dengan nama yang berbeda dan menghapusnya.
Kemudian, saya memeriksa nama cabang yang sama lagi dan berhasil.
TLDR;
Saya tidak dapat memeriksa `staging / rc '.
Jadi, saya melakukan checkout dengan menggunakan
staging
remote yang mengarah ke `staging / rc '.Dan, saya menghapusnya dan melakukan pembayaran lagi. Tapi, kali ini saya gunakan
staging/rc
sebagai nama cabang lokal saya.Ini berhasil dan saya tidak tahu mengapa.
sumber
Mohon terlebih dahulu berikan izin dari
root
akun seperti di bawah inisetelah itu jalankan perintah komit
sumber
chown -R root:user directory
, dan laluchmod -R 775 directory
(atau770
, jika akun lain juga tidak memerlukan akses baca).