ฉันสร้างไดเรกทอรี/var/wwwในการจัดเก็บเว็บของฉันปพลิเคชันในโคลน. เมื่อผมเริ่มโคลนแอปจาก GitHub มันต้องให้ผมใช้ sudo และทุกครั้งที่ผมทำgit pullก็ต้องใช้ sudo ฉันกำลังประสบปัญหาบางอย่างด้วยเหตุนี้ ตัวอย่างเช่น คีย์ ssh ของฉันไม่ตรงกัน ดังนั้นเมื่อฉันทำgit pullฉันต้องใช้ HTTPS แทน ssh และป้อนชื่อผู้ใช้และรหัสผ่านด้วยตนเองทุกครั้งที่ต้องการดึงและอัปเดตแอป ฉันจะกำหนดค่าสิ่งนี้ได้อย่างไรเพื่อที่ฉันจะได้ไม่ต้องใช้ sudo ทุกครั้งที่ใช้ git

answer

สองสามสิ่งที่เกิดขึ้นที่นี่:

  • เมื่อคุณsudo git checkout ...ไฟล์ทั้งหมดนั้นเป็นของผู้ใช้รูทและกลุ่มรูท ด้วยการอนุญาตมาตรฐาน นั่นเป็นสาเหตุที่การเปลี่ยนแปลงในภายหลังกับไฟล์เหล่านั้นต้องการให้คุณรูท

  • /var/www/โดยค่าเริ่มต้นจะเป็นเจ้าของโดยwww-dataกลุ่ม สิ่งที่ผู้ใช้ของคุณไม่ใช่โดยค่าเริ่มต้น

วิธีที่ง่ายที่สุดที่จะเขียนใน/var/www/เป็นเพียงการเพิ่มผู้ใช้ของคุณในกลุ่ม www-ข้อมูล แน่นอน คุณสามารถเปลี่ยนไดเร็กทอรีให้เป็นของผู้ใช้ของคุณ แต่สิ่งนี้อาจส่งผลเสียต่อคุณหากคุณไม่ได้จองไว้ล่วงหน้า

คุณจะต้องเข้าสู่ระบบอีกครั้งหลังจากเพิ่มผู้ใช้ของคุณในกลุ่มข้อมูล www

ในกรณีของคุณโดยเฉพาะ คุณจะต้องแก้ไขความยุ่งเหยิงของข้อมูลที่เป็นเจ้าของรูทในปัจจุบัน คุณสามารถลบมันเป็นรูท (และชำระเงินใหม่) แต่ถ้าคุณมีงานที่ยังไม่ได้บันทึก มันจะสะอาดกว่าถ้าดึงทุกอย่างกลับมาที่ผู้ใช้ของคุณ ตัวอย่างต่อไปนี้ขี้เกียจมากและถือว่าสิ่งที่เรากำลังพูดถึงเป็นสิ่งเดียวใน /var/www/:

sudo chown -R www-data: /var/www/

หืม เปลี่ยนเจ้าของโฟลเดอร์? ฉันย้ายโฟลเดอร์ www ของฉันไปที่ /home/username คุณสามารถเปลี่ยนตำแหน่งได้ใน /etc/apache2/sites-enabled/000-default

ฉันตอบช้าไปหน่อย แต่ฉันพบว่าเพื่อหลีกเลี่ยงการป้อนรหัสผ่านทุกครั้งที่ฉันต้องเปลี่ยน repo จาก https เป็น ssh

จากส่วนช่วยเหลือ Github.com:

คำสั่งgit remote set-urlเปลี่ยน URL ที่เก็บระยะไกลที่มีอยู่

เปิดเทอร์มินัล

เปลี่ยนไดเร็กทอรีการทำงานปัจจุบันเป็นโปรเจ็กต์ในพื้นที่ของคุณ

ระบุรีโมตที่มีอยู่เพื่อรับชื่อรีโมตที่คุณต้องการเปลี่ยน

git remote -v
origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
origin  https://github.com/USERNAME/REPOSITORY.git (push)

เปลี่ยน URL ของรีโมตจาก HTTPS เป็น SSH ด้วยคำสั่ง git remote set-url

git remote set-url origin [email protected]:USERNAME/REPOSITORY.git

ตรวจสอบว่า URL ระยะไกลมีการเปลี่ยนแปลง

git remote -v

# ตรวจสอบ URL ระยะไกลใหม่

origin  [email protected]:USERNAME/REPOSITORY.git (fetch)
origin  [email protected]:USERNAME/REPOSITORY.git (push)