นำเข้าโครงการ git ที่มีอยู่ใน GitLab หรือไม่


147

ฉันมีบัญชีของการติดตั้ง Gitlab ที่ฉันสร้างที่เก็บ "ffki-startseite"

ตอนนี้ฉันต้องการโคลนพื้นที่เก็บข้อมูลgit://freifunk.in-kiel.de/ffki-startseite.gitลงในพื้นที่เก็บข้อมูลที่มีความมุ่งมั่นและสาขาทั้งหมดเพื่อให้ฉันสามารถเริ่มทำงานได้ในขอบเขตของตัวเอง

ฉันจะนำเข้าได้อย่างไร


3
คุณลักษณะใหม่ของ gitlab สร้างโครงการจากนั้นไปที่หน้าโครงการ ที่นี่คุณจะเห็นคำแนะนำพื้นฐาน
Martijn van Wezel

สำเนาที่เป็นไปได้ของการทำมิเรอร์ที่เก็บ Gitlab
kelvin

คำแนะนำพื้นฐานหายไปใน Gitlab เวอร์ชันใหม่กว่าใครที่คัดลอกมาคัดลอกมาที่นี่ได้ไหม
jdevora

คำตอบ:


156

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

เพื่อแสดงตัวอย่างของฉันฉันจะใช้https://github.com/raveren/kintเป็นแหล่งเก็บข้อมูลต้นฉบับที่ฉันต้องการนำเข้าสู่ gitlab ฉันสร้างโครงการว่างชื่อKint(ภายใต้ namespace raveren) ใน gitlab ล่วงหน้าและมันบอกURL http git url ของโครงการที่สร้างขึ้นใหม่มีhttp://gitlab.example.com/raveren/kint.git

คำสั่งคือระบบไม่เชื่อเรื่องพระเจ้า

ในไดเรกทอรีใหม่ :

git clone --mirror https://github.com/raveren/kint
cd kint.git
git remote add gitlab http://gitlab.example.com/raveren/kint.git
git push gitlab --mirror

ทีนี้ถ้าคุณมีที่เก็บแบบโลคัลที่คุณต้องการใช้กับรีโมตใหม่ต่อไปให้รันคำสั่งต่อไปนี้ * ที่นั่น:

git remote remove origin
git remote add origin http://gitlab.example.com/raveren/kint.git
git fetch --all

* นี่ถือว่าคุณไม่ได้เปลี่ยนชื่อรีโมตมาสเตอร์ของคุณoriginมิฉะนั้นให้เปลี่ยนสองบรรทัดแรกเพื่อแสดง


1
มันทำให้ฉันมีข้อผิดพลาด: ระยะไกล: GitLab: คุณไม่ได้รับอนุญาตให้บังคับให้กดรหัสไปยังสาขาที่มีการป้องกันในโครงการนี้ ถึง10.0.100.89:8496/project/james-project.git ! [การปฏิเสธจากระยะไกล] master -> master (ปฏิเสธการขอ hook ล่วงหน้า)
James Hirschorn

4
ฉันต้องปิดสาขาที่ได้รับการป้องกันในการตั้งค่า -> ที่เก็บเพื่อให้มันใช้งานได้
James Hirschorn

ดูคำถามของฉันว่าทำไมคุณถึงใช้--mirror
Martijn van Wezel

108

เพิ่ม gitlab ใหม่จากระยะไกลไปยังพื้นที่เก็บข้อมูลที่มีอยู่แล้วกด:

git remote add gitlab url-to-gitlab-repo
git push gitlab master

ผมต้องผลักดันด้วยแรงทำให้ฉัน fiddled รอบใน gitLab git push gitlab master -fแล้ว: ตอนนี้ฉันมี repo ทั้งหมดที่มีความมุ่งมั่นทั้งหมดใน GitLab ใหม่ของฉัน;) ขอบคุณ
rubo77

19
คุณไม่ต้องการกระจกหรอกเหรอ? ถ้าคุณมีสาขาอื่นที่ไม่ใช่สาขา
slhck

7
ใช่ด้วยการทำตามคำแนะนำของ OP คุณจะสูญเสียสาขาทั้งหมด (ยกเว้นมาสเตอร์) และแท็ก
raveren

Gitlab Project Import จะโหลด repo ระยะไกลจาก URL เมื่อคุณสร้างโครงการ มีคำแนะนำสำหรับการนำเข้า svn repos
rickfoosusa

1
git remote เพิ่ม gitlab url-to-gitlab-repo git push gitlab master --mirror
Saurabh

23

เพื่อรักษาแท็กและสาขาทั้งหมด

เพียงแค่เรียกใช้คำสั่งนี้ใน existing Git repository

cd existing_repo
git remote rename origin previous-hosts
git remote add gitlab git@git.hutber.com:hutber/kindred.com.git
git push -u gitlab --all
git push -u gitlab --tags

ไม่ได้คัดลอกทุกสาขา
Martijn van Wezel

19

นี่คือขั้นตอนที่ให้โดย Gitlab:

cd existing_repo
git remote rename origin old-origin
git remote add origin https://gitlab.example.com/rmishra/demoapp.git
git push -u origin --all
git push -u origin --tags

สิ่งนี้จะผลักดันต้นแบบและไม่ใช่สาขาอื่น ๆ
allkenang

18

นี่เป็นการย้ายพื้นฐานหนึ่ง repo ไปยังตำแหน่งใหม่ ฉันใช้ลำดับนี้ตลอดเวลา ด้วย- ไม่เห็นไฟล์ต้นฉบับใด ๆ

เปิด Git Bash
สร้างโคลนเปล่าของที่เก็บ

git clone --bare https://github.com/exampleuser/old-repository.git

Mirror-push ไปยังที่เก็บใหม่

cd old-repository.git

git push --mirror https://github.com/exampleuser/new-repository.git

ลบที่เก็บโลคัลชั่วคราวที่คุณสร้างในขั้นตอน 1

cd ../
rm -rf old-repository.git

ทำไมต้องเป็นกระจก ดูเอกสารของ git: https://git-scm.com/docs/git-push

- ผลักดันทุกสาขา (เช่นอ้างอิงภายใต้ refs / หัว /); ไม่สามารถใช้กับผู้อื่นได้

- มิเรอร์แทนการตั้งชื่อ ref แต่ละรายการที่จะผลักดันระบุว่า refs ทั้งหมดภายใต้ refs / (ซึ่งรวมถึง แต่ไม่ จำกัด เฉพาะ refs / heads /, refs / remotes /, และ refs / tags /) จะถูกมิเรอร์ไปยังที่เก็บรีโมต การอ้างอิงแบบโลคัลที่สร้างขึ้นใหม่จะถูกผลักไปที่ปลายรีโมตการอ้างอิงแบบโลคัลที่อัปเดตในท้องถิ่นจะถูกบังคับให้อัปเดตบนรีโมตปลายทางและการอ้างอิงที่ถูกลบจะถูกลบออกจากรีโมตปลายทาง นี่เป็นค่าเริ่มต้นหากตั้งค่าตัวเลือกการตั้งค่าระยะไกล .. กระจกเงา


ทำงานร่วมกับ gitlab เช่นกัน!
ผ้าเช็ดตัว

12

rake gitlab: import: reposอาจเป็นวิธีที่เหมาะสมกว่าสำหรับการนำเข้าจำนวนมาก:

  • คัดลอกที่เก็บเปล่าภายใต้repos_path( /home/git/repositories/group/repo.git) ชื่อไดเรกทอรีจะต้องลงท้ายด้วย.gitและอยู่ภายใต้ namespace ของกลุ่มหรือผู้ใช้
  • วิ่ง bundle exec rake gitlab:import:repos

เจ้าของจะเป็นผู้ดูแลระบบคนแรกและกลุ่มจะถูกสร้างขึ้นหากยังไม่มีอยู่

ดูเพิ่มเติม: วิธีนำเข้าที่เก็บ git เปลือยที่มีอยู่ใน Gitlab ได้อย่างไร


สำหรับผู้ที่อาจจะสับสนที่เก็บเปลือยเป็นที่เก็บมักจะอยู่ในสถานที่ตั้งส่วนกลาง (เช่น Github) ที่ไม่ได้มีโฟลเดอร์. git ที่รากของพื้นที่เก็บข้อมูล นี่เป็นเพียงตัวเลือกที่สะดวกถ้าคุณเข้าถึงเซิร์ฟเวอร์ที่จัดเก็บที่เก็บเปล่า มิฉะนั้นคำตอบโดย @Raveren เป็นตัวเลือกที่ดีที่สุด
TinkerTenorSoftwareGuy

4
git clone --mirror git@github.com:username/repo-name.git

git remote add gitlab ssh://git@servername.com/username/repo.git

git push -f --tags gitlab refs/heads/*:refs/heads/*

มันเป็นการดีกว่าที่จะทำผ่าน ssh, https อาจไม่ทำงาน


"https อาจไม่ทำงาน" ปกติแล้วนี่ไม่ใช่เรื่องปกติ
Martijn van Wezel

นี่เป็นสิ่งที่จริงแล้วเนื่องจากการเชื่อมต่อ HTTP อาจถูกปิดใช้งาน ขอบคุณสำหรับคำตอบ.
คา

2

การย้ายโปรเจ็กต์จาก GitHub ไปยัง GitLab รวมถึงปัญหาการดึงคำขอ Wiki เหตุการณ์สำคัญป้ายกำกับบันทึกประจำรุ่นและความคิดเห็น

มีคำแนะนำอย่างละเอียดเกี่ยวกับ GitLab Docs:

https://docs.gitlab.com/ee/user/project/import/github.html

TL; DR

  • ตรวจสอบให้แน่ใจว่าผู้ใช้ GitHub ที่คุณต้องการแมปกับผู้ใช้ GitLab มี:

    • บัญชี GitLab ที่ลงชื่อเข้าใช้ด้วยไอคอน GitHub - หรือ -
    • บัญชี GitLab พร้อมที่อยู่อีเมลที่ตรงกับที่อยู่อีเมลสาธารณะของผู้ใช้ GitHub
  • จากแถบการนำทางด้านบนคลิก + และเลือกโครงการใหม่

  • เลือกแท็บนำเข้าโครงการจากนั้นเลือก GitHub
  • เลือกปุ่มแรกเพื่อแสดงรายการที่เก็บ GitHub ของคุณ คุณถูกนำไปที่หน้าใน github.com เพื่ออนุญาตแอปพลิเคชัน GitLab
  • คลิกอนุญาต gitlabhq คุณจะถูกเปลี่ยนเส้นทางกลับไปที่หน้านำเข้าของ GitLab และที่เก็บ GitHub ทั้งหมดของคุณจะแสดงรายการ
  • ดำเนินการต่อเพื่อเลือกที่เก็บที่จะนำเข้า

แต่โปรดอ่านหน้าGitLab Docsเพื่อรับรายละเอียดและขอใช้!

(มันไม่มาก)


1

Gitlab มีข้อบกพร่องเล็กน้อยในคุณสมบัตินี้ คุณสามารถเสียเวลาแก้ไขปัญหาเป็นพิเศษหากโครงการของคุณใหญ่

ทางออกที่ดีที่สุดคือการใช้เครื่องมือสร้าง / นำเข้าอย่าลืมใส่ชื่อผู้ใช้และรหัสผ่านมิฉะนั้นจะไม่นำเข้าอะไรเลย

ติดตามภาพหน้าจอของฉัน

ป้อนคำอธิบายรูปภาพที่นี่

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