Git push error ได้รับฮุ๊กล่วงหน้าถูกปฏิเสธ


168

ฉันได้ทำงาน gitlabhq รางเซิร์ฟเวอร์บนเครื่องเสมือนดังต่อไปนี้ 1-6 ขั้นตอนจากนี้กวดวิชาhttps://github.com/gitlabhq/gitlab-recipes/blob/master/install/centos/README.mdsudo -u git -H bundle exec rails s -e productionและเริ่มต้นรางคำสั่งเซิร์ฟเวอร์การดำเนินการ หลังจากนั้นฉันสร้างผู้ใช้โดยใช้เครื่องมือผู้ดูแลระบบและสร้างโครงการใหม่ภายใต้ผู้ใช้นี้ จากนั้นฉันพยายามที่จะผลักดันโครงการที่มีอยู่ไปยัง repo นี้เช่นเคย แต่ในขั้นตอนสุดท้ายgit push origin masterล้มเหลวด้วยข้อผิดพลาด

[ปฏิเสธระยะไกล] master -> master (ปฏิเสธการขอล่วงหน้า)

ข้อมูลเพิ่มเติม:

1) ฉันยังไม่ได้เปิดใช้งานผู้ใช้ (เจ้าของโครงการ) ผ่านลิงก์เปิดใช้งานอีเมลเพราะฉันไม่ได้กำหนดค่าบริการไปรษณีย์บนฝั่งเซิร์ฟเวอร์และฉันไม่พบคำแนะนำวิธีการทำเช่นนั้นในคู่มือนี้

2) เซิร์ฟเวอร์ Gitlab สร้างเคล็ดลับวิธีผลักโครงการเพื่อซื้อคืนและไม่มีrepositories/เส้นทาง ฉันหมายถึงมันสร้างขึ้นgit@mygitlabhost:user/repo.gitแทนที่git@mygitlabhost:repositories/user/repo.gitถูกต้อง

3) เมื่อฉันพยายามที่จะแก้ปัญหานั้นผมเปิดpre-receiveสคริปต์ภายใน repo บนเซิร์ฟเวอร์และพยายามที่จะตัวแปรเอาท์พุท (มี 3 ของพวกเขา) refs = ARGF.read, key_id = ENV['GL_ID']และrepo_path = Dir.pwdและพบ KEY_ID ที่อยู่เสมอว่างเปล่า อาจเป็นปัญหาที่นี่ ... ถ้าเป็นเช่นนั้นโปรดให้คำแนะนำเกี่ยวกับวิธีการแก้ไข ขอบคุณ


15
ฉันสาบานว่ามีอย่างน้อย 1 คนในทีมพัฒนาซอฟต์แวร์ทุกคนที่ตื่นขึ้นมาทุกวันและคิดว่าจะทำให้ชีวิตของนักพัฒนาซอฟต์แวร์คนอื่นยากขึ้นได้อย่างไร
samayo

ดูเหมือนว่าจะมีคำตอบยอดนิยมที่ต้องใช้กับคนส่วนใหญ่ ในกรณีของฉันอย่างไรก็ตามได้รับข้อความเดียวกันจาก Git Hubเมื่อมีการกดอีกครั้งโดยไม่ตั้งใจจากเครื่องอื่นเมื่อพยายามกด
Hack-R

คำตอบ:


230

GitLab ตามค่าเริ่มต้นทำเครื่องหมายmasterสาขาว่าprotected(ดูส่วนหนึ่งProtecting your codeในhttps://about.gitlab.com/2014/11/26/keeping-your-code-protected/ทำไม) หากเป็นเช่นนั้นในกรณีของคุณสิ่งนี้สามารถช่วย:

เปิดโครงการของคุณ> การตั้งค่า> พื้นที่เก็บข้อมูลและไปที่ "สาขาที่ได้รับความคุ้มครอง" ค้นหาสาขา "หลัก" ในรายการและคลิก "เลิกป้องกัน" แล้วลองอีกครั้ง

ผ่านhttps://gitlab.com/gitlab-com/support-forum/issues/40

สำหรับเวอร์ชัน 8.11 ขึ้นไปวิธีใช้ที่นี่: https://docs.gitlab.com/ee/user/project/protected_branches.html#restricting-push-and-merge-access-to-certain-users


8
UI มีการเปลี่ยนแปลงเล็กน้อย: หลังจากโครงการ "การตั้งค่า" คลิกแท็บ "พื้นที่เก็บข้อมูล" จากนั้น "สาขาที่ได้รับความคุ้มครอง"
Donn Lee

ดังนั้นฉันจึงมีปัญหาเดียวกันกับ OP และวิธีนี้ใช้ได้สำหรับฉันขอบคุณ! แต่ตอนนี้ฉันสงสัยว่าทำไม ฉันใช้ gitlab มาระยะหนึ่งแล้วฉันก็ทำสิ่งนี้ทันที? มีอะไรเปลี่ยนแปลง
Andrew Lamarra

2
เนื่องจากGitLab 8.11ตัวเลือกมีการเปลี่ยนแปลงเล็กน้อยให้ตรวจสอบรายละเอียดที่นี่
Arghya C

ประสบปัญหาเดียวกัน ที่นี่ฉันไม่สามารถผลักดันสาขาอื่นได้เช่นกัน ฉันกำลังผลักดันมันเป็นครั้งแรก
Santosh Kadam

1
ฉันลบที่ไม่มีการป้องกัน แต่จะเกิดอะไรขึ้นตอนนี้ มีใครในโลกที่สามารถทำงานกับ repo นี้ได้บ้าง
Flutterer

14

ปัญหาต่อไปนี้ได้รับการแก้ไขในเครื่องท้องถิ่นของฉัน:

A. ขั้นแรกตรวจสอบให้แน่ใจว่าคุณใช้รายละเอียดการเข้าสู่ระบบที่ถูกต้องเพื่อเชื่อมต่อกับเซิร์ฟเวอร์ Bitbucket (เช่นชื่อผู้ใช้ / รหัสผ่าน / รหัส SSH ที่เป็นของคุณ) 

B. จากนั้นตรวจสอบให้แน่ใจว่าชื่อ / ที่อยู่อีเมลถูกต้องในการกำหนดค่า Git ในพื้นที่ของคุณ: ตั้งค่าการตั้งค่า Git ในพื้นที่ของคุณสำหรับบัญชีที่คุณพยายามที่จะกดใต้ (การตรวจสอบยืนยันว่า โปรดทราบว่านี่เป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ทั้งชื่อและที่อยู่อีเมล * นอกจากนี้ยังมีความอ่อนไหวด้านเนื้อที่ - บัญชี บริษัท บางบัญชีมีช่องว่าง / อักขระพิเศษในชื่อของพวกเขาเช่น " Contractor/ space space(LDN)" คุณต้องมีช่องว่างจำนวนเท่ากันในการกำหนดค่าของคุณเช่นเดียวกับบนเซิร์ฟเวอร์ Bitbucket ตรวจสอบใน Notepad ถ้าติดอยู่

C. หากคุณใช้บัญชีที่ไม่ถูกต้องเพียงแค่เปลี่ยนข้อมูลบัญชีของคุณ (ชื่อผู้ใช้ / รหัสผ่าน / รหัส SSH) แล้วลองกดอีกครั้ง

D. อื่น ๆ หากการกำหนดค่าท้องถิ่นของคุณไม่ถูกต้องคุณจะต้องแก้ไข

สำหรับ MAC

open -a TextEdit.app ~/.gitconfig

หมายเหตุ: คุณจะต้องแก้ไขข้อผูกพันเก่า ๆ ที่คุณพยายามผลักดัน

  1. แก้ไขความมุ่งมั่นล่าสุดของคุณ:

    > git commit --amend --reset-author
    
      
    <save and quit the commit file text editor that opens, if Vim then
    :wq to save and quit>
    
  2. ลองทำการยืนยันอีกครั้ง:

    > git push
    

12

ในกรณีของฉันนำทีมของเราสามารถสร้าง repo A (repo เป็นที่ว่างเปล่า) และกำหนดให้ฉันเป็นนักพัฒนาดังนั้นเมื่อผมผลักให้รหัสโดยตรงกับหลักข้อผิดพลาดที่ผมกำลังเผชิญ! [remote rejected] master -> master (pre-receive hook declined)ดังนั้นวิธีการที่จะได้รับการแก้ไขว่าเขาได้รับมอบหมายให้ผมเป็นผู้ดูแลดังนั้นฉัน สามารถผลักดันรหัสโดยตรงไปยังต้นแบบ


10

ดูเหมือนว่าปัญหาจะเกิดขึ้นกับบริการบางอย่างเช่น sidekiq การรันsudo -u git -H bundle exec rake gitlab:check RAILS_ENV=productionเอาต์พุตปัญหาทั้งหมดที่มีกับ config



2

คุณอาจไม่มีสิทธิ์การเข้าถึงของผู้พัฒนาโครงการหรือสาขาหลัก คุณต้องเข้าถึง dev เพื่อผลักดันงานใหม่

งานใหม่หมายถึงสาขาใหม่และความมุ่งมั่น


2

อาจไม่ใช่กรณี แต่นี่เป็นวิธีการแก้ไขข้อผิดพลาด "การปฏิเสธการรับเบ็ดล่วงหน้า " ของฉัน:

มีที่เก็บบางอย่างที่อนุญาตให้เฉพาะการปรับเปลี่ยนผ่านที่มีการขอดึง ซึ่งหมายความว่าคุณต้อง

  1. สร้างสาขาใหม่โดยยึดสาขาที่คุณต้องการผลักดันการเปลี่ยนแปลงของคุณ
  2. มุ่งมั่นและผลักดันการเปลี่ยนแปลงของคุณไปยังสาขาใหม่
  3. เปิดคำขอดึงเพื่อรวมสาขาของคุณเข้ากับสาขาเดิม

0

คุณต้องเพิ่มคีย์ ssh ของคุณไปยังบัญชี git ของคุณหากมันเกิดข้อผิดพลาดให้ลบคีย์ ssh ก่อนหน้าและสร้างคีย์ ssh ใหม่แล้วเพิ่ม


นั่นไม่ได้ช่วยอะไร :( ทดสอบกับทั้งสองบัญชี - root และ myuser บน vm และการตอบกลับด้วยเครื่องในพื้นที่
Hroft

ตรวจสอบ git remote -v, repo git ของคุณถูกเพิ่มหรือไม่?
Hardik Hardiya

เอาต์พุต 'git remote -v': origin git @ mygitlabhost: repositories / user / repo.git (fetch) origin git @ mygitlabhost: repositories / user / repo.git (พุช)
Hroft

หากคุณใช้ gitlab โฮสต์ปัญหาน่าจะอยู่ข้างๆ ลองอีกครั้งในอีกไม่กี่นาที
Erik Aronesty

0

ฉันแก้ไขปัญหานี้โดยเปลี่ยนremote 'origin' urlจากhttpเป็นgitโปรโตคอลใน.git/config


0

ไปที่การตั้งค่าโครงการ -> hooks -> (ด้านล่าง) รับตะขอล่วงหน้า

ปิดใช้งาน cp ต้องการการอ้างอิงปัญหาในคอมมิท


0

ฉันพบข้อผิดพลาดเดียวกันโดยใช้ BitBucket ฉันมี repo Git ในพื้นที่ฉันต้องการสำรองออนไลน์ดังนั้นฉันจึงสร้างที่เก็บใหม่จากบัญชี BitBucket ของฉัน (โดยใช้เว็บอินเตอร์เฟส)

หลังจากทำงานgit remote add origin git@bitbucket.org:StatMarianne/<a private repo>.gitฉันก็วิ่งgit push origin masterไปที่ไม่มีประโยชน์ (โดยทั่วไปฉันไม่ได้ใช้ตัวเลือก-uด้วยgit pushเพราะฉันไม่รังเกียจที่จะพิมพ์ชื่อ repo และสาขาแบบเต็มเมื่อกดและดึง)

ข้อผิดพลาดอ่าน:

remote: You're not allowed to write to this repository.
To bitbucket.org:StatMarianne/<a private repo>.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@bitbucket.org:StatMarianne/<a private repo>.git'

แต่สาขาในประเทศของฉันได้รับการผลักดันให้สำเร็จเมื่อฉันวิ่งgit push -u origin master(ปฏิบัติตามคำแนะนำของ BitBucket อย่างเคร่งครัด)

ฉันคิดว่ามันน่าประหลาดใจเนื่องจาก-u ( --set-upstream) ควร "เพิ่มการอ้างอิงต้นน้ำ (การติดตาม) เท่านั้น ... " อย่างไรก็ตาม


-1

ฉันประสบปัญหาเดียวกันนี่เป็นเพราะฉันผลักรหัสของฉันโดยตรงในสาขาหลักและฉันไม่มีสิทธิ์สำหรับสิ่งนี้ ดังนั้นฉันจึงผลักรหัสของฉันในสาขาใหม่และหลังจากนั้นฉันสร้างคำขอดึงเพื่อผสานกับหลัก

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