Git pull ในสภาพแวดล้อม Linux จะเปลี่ยนเจ้าของไฟล์


12

ทำไมทุกครั้งที่ฉันรันgit pullเซิร์ฟเวอร์สดเจ้าของไฟล์จะถูกเปลี่ยน? chown john:john index.phpผมเก็บไว้ในการทำด้วยตนเอง

ฉันจะทำอะไรต้องเปลี่ยนเพื่อให้เมื่อฉันทำgit pullเจ้าของไฟล์จะถูกโดยอัตโนมัติจะเข้าพักหรือjohn?


1
เป็นjohnเจ้าของไดเรกทอรีปัจจุบันหรือไม่
user000001

ใช่ john เป็นเจ้าของไดเรกทอรี :)
PinoyStackOverflower

1
ที่ผู้ใช้ทำงานgit pull?
cuonglm

@Gnouc ผู้ใช้รูทฉันลงชื่อเข้าใช้เซิร์ฟเวอร์สดของเราผ่าน SSH ในฐานะผู้ใช้รูท :)
PinoyStackOverflower

คำตอบ:


11

เมื่อคุณใช้git pull(ซึ่งเทียบเท่ากับgit fetch; git merge) git จะอัปเดตไฟล์โดยไม่เปลี่ยนเจ้าของ (git จะไม่เก็บข้อมูลนั้น) แต่ถ้ามีไฟล์ใหม่ที่จะสร้างผู้ใช้ปัจจุบันจะถูกตั้งเป็นเจ้าของ

มีวิธีแก้ไขปัญหาที่แตกต่างกันในการแก้ปัญหานี้ ง่ายขึ้นน่าจะเพิ่มpost-updatehooks (ใน.git/hooksไดเรกทอรีของคุณ) เพื่อโทรโดยอัตโนมัติchown john:john . -Rหลังจากผสาน / ดึง ( ดูตัวอย่างโซลูชัน SO )

ทางเลือกอื่น ได้แก่ :

  • เรียกใช้git pullในฐานะผู้ใช้ john แทนที่จะเป็นรูท (ซึ่งจะต้องมีสิทธิ์ในการเขียนไปยัง john สำหรับไดเรกทอรี. git)
  • สร้าง hook เพื่อทำการปรับใช้ซึ่งจะใช้ john เป็นผู้ใช้ทำ chown หลังจากอัพเดต (ดังนั้นคุณจะต้องทำgit pullภายในpost-receivehook ของ repo เปล่า)

จะทำอย่างไรถ้าคุณทำgit fetchในฐานะรูทและgit mergeในฐานะผู้ใช้จอห์น john จะยังต้องการสิทธิ์ในการเขียนสำหรับ.gitไดเรกทอรีหรือไม่?
สัญลักษณ์ตัวแทน

ใช่เกือบทุกครั้ง git fetchในฐานะ root ไฟล์ใหม่ใน. git / objects` อาจมีรูตเป็นเจ้าของ git mergeเป็นผู้ใช้จอห์นจะ (ส่วนใหญ่ของเวลา) พยายามที่จะเขียนทับอย่างน้อย.git/indexและ.git/HEAD(ซึ่งอาจถูกลบ / สร้างขึ้นในการเปลี่ยนแปลงแต่ละครั้งผมคิดว่า) .git/objects/และเขียนไฟล์บางอย่างใน + ไฟล์ใหม่ใด ๆ ในไดเรกทอรีทำงานของคุณ อาจมีข้อยกเว้นที่มีการกรอไปข้างหน้าอย่างรวดเร็ว
Asenar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.