Git - ตะขอหลังรับพร้อม git pull“ ไม่สามารถหาไดเรกทอรี git ที่ถูกต้องได้”


17

มันแปลกมาก แต่เมื่อตั้งค่าที่เก็บ git และสร้างเบ็ด post-receive ด้วย:

echo "--initializing hook--"
cd ~/websites/testing
echo "--prepare update--"
git pull
echo "--update completed--"

เบ็ดทำงานจริง ๆ แต่มันก็ไม่สามารถจัดการกับการดึง git ได้อย่างถูกต้อง:

6bfa32c..71c3d2a  master -> master
--initializing hook--
--prepare update--
fatal: Not a git repository: '.'
Failed to find a valid git directory.
--update completed--

ดังนั้นฉันถามตัวเองตอนนี้เป็นไปได้อย่างไรที่จะทำให้ hook อัพเดต clone ด้วย post-receive

ในกรณีนี้ผู้ใช้ที่ทำงานกระบวนการเหมือนกันและทุกอย่างในโฟลเดอร์ผู้ใช้ดังนั้นฉันจึงไม่เข้าใจ ... เพราะถ้าฉันเข้าไปด้วยตนเอง

cd ~/websites/testing
git pull

มันทำงานได้โดยไม่มีปัญหาใด ๆ ...

ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมมาก

ขอบคุณมาก

คำตอบ:


25

ขณะที่ hook กำลังทำงานGIT_DIRและ (ถ้า worktree ถูกกำหนดอย่างชัดเจน) GIT_WORK_TREEจะถูกตั้งค่า นั่นหมายความว่าการดึงของคุณจะไม่ทำงานกับที่เก็บข้อมูลที่สองในไดเรกทอรีที่คุณเปลี่ยนไป

ลองgit --git-dir ~/websites/testing/.git --work-tree ~/websites/testing pull; หรือยกเลิกสภาพแวดล้อม repo-local ของคอมไพล์ด้วยสิ่งนี้:

unset $(git rev-parse --local-env-vars)

ข้อมูลเพิ่มเติมเกี่ยวกับตัวแปรสภาพแวดล้อมเหล่านี้ในคน 1 คอมไพล์


1
ขอบคุณมากสำหรับ Tobu นั้นมันใช้งานได้จริงฉันจะตรวจสอบข้อมูลเพิ่มเติมเกี่ยวกับมันด้วย ไชโย
zanona

6

สิ่งหนึ่งที่ฉันมีประสบการณ์คือการใช้post-updatehook '--git-dir' ทำงานได้ดี แต่ git ยังคงบ่นเกี่ยวกับต้นไม้ทำงานที่ขาดหายไป (แม้จะใช้ '--work-tree')

ในระยะสั้นสิ่งนี้ไม่ได้ผล:

git --git-dir /path/to/websites/testing/.git --work-tree /path/to/websites/testing pull

ในขณะที่สิ่งนี้ทำงาน:

cd /path/to/websites/testing
git --git-dir /path/to/websites/testing/.git pull


1

มันใช้ไม่ได้เหรอ

cd /home/smb/websites/testing
env -i git pull

แก้ไข

ยังดีกว่า

cd /home/smb/websites/testing
unset GIT_DIR
git pull


0

สคริปต์อาจถูกเรียกด้วยซึ่งไม่เข้าใจ/bin/sh ~ลองใช้เส้นทางแบบเต็มเพื่อ~แทน


0

คำตอบแรกที่แนะนำนั้นถูกต้อง - เมื่อตั้งค่า hook ที่ใช้ GIT_DIR เป็นต้น อย่างไรก็ตามหากคุณต้องการให้สามารถใช้สคริปต์ในที่เก็บข้อมูลอื่นวิธีการนั้นจะมีข้อบกพร่องเนื่องจากเป็นรหัสฮาร์ดรีเซ็ต GIT_DIR วิธีอื่นคือการลบตัวแปรโดยใช้ env ดังนี้ env -i git reset - ยากเห็นได้ชัดว่าคำสั่งที่คุณเรียกใช้นั้นขึ้นอยู่กับคุณนั่นเป็นบิต 'env -i' ซึ่งเป็นบิตที่สำคัญ .

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.