สำรอง git repo อย่างเต็มที่หรือไม่


142

มีวิธีง่ายๆในการสำรองข้อมูล git repo ทั้งหมดรวมถึงสาขาและแท็กทั้งหมดหรือไม่


2
ฉันเดาว่าคุณกำลังอ้างถึง repos git ในพื้นที่ที่นี่
Ztyx


3
คำตอบที่ถูกต้องคือทำ a: git clone --mirror git@example.com/your-repo.git สิ่งนี้จะคัดลอกที่เก็บโน้ตสาขาการติดตามและอื่น ๆ ทั้งหมดของคุณ
John

การค้นหาเว็บบางรายการที่ฉันเรียกใช้ซึ่งไม่ได้รวมคำถามนี้ไว้ในผลลัพธ์: "git clone อย่างแน่นอนทุกอย่างที่แตกแท็กบันทึก"; "git โคลนทุกอย่างในที่เก็บ"; "git โคลน repo พร้อมบันทึกแท็กทั้งหมด"
Kenny Evitt

คำตอบ:


66

มีอะไรเกี่ยวกับการสร้างโคลนของมัน?

git clone --mirror other/repo.git

ทุกที่เก็บเป็นข้อมูลสำรองของรีโมต


7
@ แดเนียล: หากคุณโคลนที่เก็บคุณจะดึงข้อมูลทุกสาขา แต่จะมีการชำระเงินเริ่มต้นเท่านั้น ลองgit branch -a. อาจจะชัดเจนกว่าด้วยวิธีนี้: หลังจากโคลนที่เก็บคุณไม่ได้ดึงทุกสาขาคุณจะดึงข้อมูลทุกคอมมิต สาขาอ้างอิงเฉพาะการกระทำที่มีอยู่
KingCrunch

1
ฉันคิดว่าเขารู้คำสั่งโคลนดีถ้าเขาสามารถถามคำถามดังกล่าวได้และชัดเจนว่ามันไม่เพียงพอสำหรับเขา (เพราะมันเป็นโคลนไม่ใช่การถ่ายโอนข้อมูล) การถ่ายโอนข้อมูลเป็นสิ่งที่แตกต่างกันเช่นเดียวกับสำเนาทั่วไปตัวอย่างเช่น 1) ไม่จำเป็นต้องมีความเหมาะสม (หรือมีความสามารถ) สำหรับการทำงานปกติ 2) แต่จำเป็นต้องมีความต้านทานและการซ่อมแซมที่ดีจากความเสียหายของข้อมูล
peterh - คืนสถานะ Monica

@peterh แน่นอน แต่git cloneครอบคลุมทั้งหมดนั้น (1) เป็นทางเลือกไม่ใช่ข้อกำหนด หากผลลัพธ์ยังคงได้รับการปรับให้เหมาะสมก็ยังคงเป็นข้อมูลสำรอง (2) ที่คอมไพล์เอง - ประเด็นที่อยากจะให้คือถ้าgit cloneครอบคลุมประเด็นที่เกี่ยวข้องแล้วคุณต้องการเครื่องมืออื่นสำหรับอะไร? แม้ว่าฉันจะชอบgit bundleแต่ฉันก็ไม่คิดว่าคำตอบของฉันผิดหรือไม่ถูกต้อง คุณสามารถดูทั้งสองวิธีเป็นการสำรองข้อมูลแบบร้อนและแบบเย็น
KingCrunch

สิทธิ์ของไฟล์ล่ะ git clone จำเป็นต้องคัดลอกสิ่งเหล่านั้นหรือไม่? ขึ้นอยู่กับตัวเลือกที่ฉันเชื่อ
antirealm

200
git bundle

ฉันชอบวิธีนั้นเพราะส่งผลให้เกิดไฟล์เพียงไฟล์เดียวและง่ายต่อการคัดลอก
ดูProGit: มัดเล็ก ๆ น้อย ๆ ของความสุข
โปรดดูที่ " ฉันจะส่งอีเมลถึงคนอื่นในที่เก็บ git ได้อย่างไร " โดยที่คำสั่ง

git bundle create /tmp/foo-all --all

มีรายละเอียด:

git bundleจะจัดแพ็คเกจเฉพาะการอ้างอิงที่แสดงโดยgit show-ref เท่านั้นซึ่งรวมถึงส่วนหัวแท็กและหัวรีโมต
เป็นสิ่งสำคัญมากที่พื้นฐานที่ใช้จะถูกยึดโดยปลายทาง
เป็นเรื่องปกติที่จะทำผิดพลาดเนื่องจากข้อควรระวังทำให้ไฟล์บันเดิลมีออบเจ็กต์อยู่แล้วในปลายทางเนื่องจากสิ่งเหล่านี้จะถูกละเว้นเมื่อคลายการบรรจุที่ปลายทาง


สำหรับการใช้บันเดิลนั้นคุณสามารถโคลนได้โดยระบุโฟลเดอร์ที่ไม่มีอยู่จริง (นอก git repo ใด ๆ ):

git clone /tmp/foo-all newFolder

13
เพิ่ม
เห็น

1
นี่git bundleคือคำตอบที่ถูกต้องสำหรับความคิดเห็นของฉันไม่ใช่คำตอบที่ยอมรับ ฉันคิดว่าเขารู้คำสั่งโคลนดีถ้าเขาสามารถถามคำถามดังกล่าวได้และชัดเจนว่ามันไม่เพียงพอสำหรับเขา (เพราะมันเป็นโคลนไม่ใช่การถ่ายโอนข้อมูล) การถ่ายโอนข้อมูลเป็นสิ่งที่แตกต่างกันเช่นเดียวกับสำเนาทั่วไปตัวอย่างเช่น 1) ไม่จำเป็นต้องมีความเหมาะสม (หรือมีความสามารถ) สำหรับการทำงานปกติ 2) แต่จำเป็นต้องมีความต้านทานและการซ่อมแซมที่ดีจากความเสียหายของข้อมูล 3) มักมีประโยชน์ หากสามารถสำรองข้อมูลส่วนเพิ่มที่แตกต่างกันได้อย่างง่ายดายในขณะที่ไม่ใช่เป้าหมายในการทำสำเนา
peterh - คืนสถานะ Monica

3
โปรดทราบว่าไม่ได้รับทุกอย่างgit bundleหรือทุกอย่างตัวอย่างเช่นสคริปต์ hook git clone
Zitrax

2
@Zitrax ใช่มันเป็นเพราะการออกแบบ ตะขออาจเป็นอันตรายหรือมีข้อมูลที่ละเอียดอ่อน
VonC

ฉันสามารถใช้git bundleกับ repo ระยะไกลได้หรือไม่
Ryan Shillington

24

ขยายคำตอบอื่น ๆ นี่คือสิ่งที่ฉันทำ:

ตั้งค่า repo: git clone --mirror user@server:/url-to-repo.git

จากนั้นเมื่อคุณต้องการรีเฟรชข้อมูลสำรอง: git remote updateจากตำแหน่งโคลน

สิ่งนี้จะสำรองข้อมูลสาขาและแท็กทั้งหมดรวมถึงสาขาใหม่ที่ถูกเพิ่มในภายหลังแม้ว่าจะเป็นที่น่าสังเกตว่าสาขาที่ถูกลบจะไม่ถูกลบออกจากการโคลน (ซึ่งสำหรับการสำรองข้อมูลอาจเป็นสิ่งที่ดี)

นี่คือปรมาณูจึงไม่มีปัญหาอย่างที่สำเนาธรรมดาจะทำได้

ดูhttp://www.garron.me/en/bits/backup-git-bare-repo.html


21

ขยายคำตอบที่ยอดเยี่ยมโดยKingCrunchและVonC

ฉันรวมทั้งสองอย่างเข้าด้วยกัน:

git clone --mirror git@some.origin/reponame reponame.git
cd reponame.git
git bundle create reponame.bundle --all

หลังจากนั้นคุณมีไฟล์ที่เรียกreponame.bundleว่าสามารถคัดลอกได้อย่างง่ายดาย จากนั้นคุณสามารถสร้างที่เก็บ git ปกติใหม่จากการใช้งานgit clone reponame.bundle reponameนั้น

โปรดทราบว่าgit bundleเฉพาะสำเนาคอมมิตที่นำไปสู่การอ้างอิงบางส่วน (สาขาหรือแท็ก) ในที่เก็บ การพันกันจึงไม่ถูกเก็บไว้ในมัด


1
สรุปได้ดี. +1.
VonC

2
ฉันคิดว่าคุณหมายถึงgit bundle create reponame.bundle --all?
โจ

ขอบคุณ @joe ที่สังเกตเห็นสิ่งนั้น อย่างแน่นอน. ฉันจะอัปเดตคำตอบ
Kimmo Ahokas

5

ใช้ git bundle หรือ clone

การคัดลอกไดเร็กทอรี git ไม่ใช่วิธีแก้ปัญหาที่ดีเพราะไม่ใช่ atomic หากคุณมีที่เก็บขนาดใหญ่ที่ใช้เวลาในการคัดลอกนานและมีคนดันไปที่ที่เก็บของคุณจะส่งผลต่อการสำรองข้อมูลของคุณ การโคลนหรือทำบันเดิลจะไม่มีปัญหานี้


4

ทุกอย่างมีอยู่ใน.gitไดเร็กทอรี เพียงสำรองข้อมูลพร้อมกับโครงการของคุณเช่นเดียวกับที่คุณทำกับไฟล์ใด ๆ


2
หมายความว่าแค่สำรองเนื้อหาทั้งหมดของไดเร็กทอรีที่มีโปรเจ็กต์ Git ก็เพียงพอแล้วหรือไม่?
Ravindranath Akila

1
เห็นด้วยกับ Sunil - สิ่งนี้ดูเหมือนจะไม่ใช่ปฏิบัติการปรมาณู
jia103

1
และคุณจะแน่ใจได้อย่างไรว่าไม่มีการเปลี่ยนแปลงใด ๆ กับไฟล์ในไดเร็กทอรีนั้นขณะสร้างการสำรองข้อมูล
Raedwald

ดังที่ Raedwald บอกใบ้วิธีนี้อาจส่งผลให้เกิดการสำรองข้อมูลที่ไม่สอดคล้องกันและทำให้ข้อมูลสูญหาย ดังนั้นคำตอบนี้ควรถูกลบออกหรืออย่างน้อยที่สุดก็เตือนเกี่ยวกับความเป็นไปได้ที่ข้อมูลจะสูญหาย
Abhishek Anand

ฉันคิดว่าเขารู้copyหรือcpคำสั่งเป็นอย่างดีและมันไม่ตรงกับความต้องการของเขา และฉันก็คิดว่าเขาคิดบนพื้นที่เก็บข้อมูลเปล่า (แม้ว่าจะสามารถคัดลอกได้เช่นกัน แต่ฉันคิดว่ามันไม่ใช่การสำรองข้อมูลที่มีคุณสมบัติครบถ้วน)
peterh - คืนสถานะ Monica

4

เธรดนี้มีประโยชน์มากในการรับข้อมูลเชิงลึกว่าการสำรองข้อมูล git repos สามารถทำได้อย่างไร ฉันคิดว่ามันยังขาดคำแนะนำข้อมูลหรือข้อสรุปเพื่อหา "วิธีที่ถูกต้อง" (tm) สำหรับตัวเอง ดังนั้นจึงแบ่งปันความคิดของฉันที่นี่เพื่อช่วยเหลือผู้อื่นและนำไปอภิปรายเพื่อปรับปรุงพวกเขา ขอบคุณ.

เริ่มต้นด้วยการหยิบคำถามเดิมขึ้นมา:

  • เป้าหมายคือการเข้าใกล้การสำรองข้อมูล "เต็ม" ของที่เก็บ git ให้มากที่สุด

จากนั้นเติมเต็มด้วยความปรารถนาทั่วไปและระบุค่าที่ตั้งไว้ล่วงหน้า:

  • ขอแนะนำให้สำรองข้อมูลผ่าน "hot-copy" เพื่อหลีกเลี่ยงการหยุดให้บริการ
  • ข้อบกพร่องของ git จะถูกแก้ไขโดยคำสั่งเพิ่มเติม
  • สคริปต์ควรทำการสำรองข้อมูลเพื่อรวมหลายขั้นตอนสำหรับการสำรองข้อมูลครั้งเดียวและเพื่อหลีกเลี่ยงข้อผิดพลาดของมนุษย์ (การพิมพ์ผิด ฯลฯ )
  • นอกจากนี้สคริปต์ควรทำการกู้คืนเพื่อปรับการถ่ายโอนข้อมูลไปยังเครื่องเป้าหมายเช่นแม้แต่การกำหนดค่าของเครื่องเดิมอาจมีการเปลี่ยนแปลงตั้งแต่การสำรองข้อมูล
  • สภาพแวดล้อมเป็นเซิร์ฟเวอร์ git บนเครื่อง Linux ที่มีระบบไฟล์ที่รองรับฮาร์ดลิงก์

1. การสำรองข้อมูล git repo "เต็ม" คืออะไร?

มุมมองแตกต่างจากการสำรองข้อมูล "100%" นี่คือสองคนทั่วไป

# 1 มุมมองของนักพัฒนา

  • เนื้อหา
  • อ้างอิง

คอมไพล์เป็นเครื่องมือของนักพัฒนาและสนับสนุนมุมมองนี้ผ่านทางและgit clone --mirrorgit bundle --all

# 2 มุมมองของผู้ดูแลระบบ

  • ไฟล์เนื้อหา
    • กรณีพิเศษ "packfile": git รวมและกระชับวัตถุลงในไฟล์แพ็คระหว่างการรวบรวมขยะ (ดูgit gc)
  • การกำหนดค่าคอมไพล์
    • ดูhttps://git-scm.com/book/en/v2/Git-Internals-Plumbing-and-Porcelain
    • เอกสาร: man git-config, man gitignore
    • .git / config
    • .git / description (สำหรับ hooks และ tools เช่น post-receiver-email hook, gitolite, GitWeb เป็นต้น)
    • .git / ตะขอ /
    • .git / info / (ไฟล์ที่ไม่รวมที่เก็บ ฯลฯ )
  • ทางเลือก: การกำหนดค่าระบบปฏิบัติการ (สิทธิ์ระบบไฟล์ ฯลฯ )

git เป็นเครื่องมือสำหรับนักพัฒนาและปล่อยให้ผู้ดูแลระบบ การสำรองข้อมูลของการกำหนดค่า git และการกำหนดค่าระบบปฏิบัติการควรแยกออกจากการสำรองข้อมูลเนื้อหา

2. เทคนิค

  • "สำเนาเย็น"
    • หยุดบริการเพื่อเข้าถึงไฟล์แบบเอกสิทธิ์เฉพาะบุคคล หยุดทำงาน!
  • "Hot-Copy"
    • บริการมีสถานะคงที่สำหรับวัตถุประสงค์ในการสำรองข้อมูล การเปลี่ยนแปลงที่กำลังดำเนินอยู่จะไม่ส่งผลต่อสถานะนั้น

3. หัวข้ออื่น ๆ ที่ต้องคิด

ส่วนใหญ่เป็นข้อมูลทั่วไปสำหรับการสำรองข้อมูล

  • มีพื้นที่เพียงพอสำหรับการสำรองข้อมูลทั้งหมดหรือไม่ จะเก็บไว้กี่ชั่วอายุคน
  • ต้องการแนวทางเพิ่มเติมหรือไม่? จะเก็บไว้กี่ชั่วอายุคนและจะสร้างการสำรองข้อมูลทั้งหมดอีกครั้งเมื่อใด
  • จะตรวจสอบได้อย่างไรว่าข้อมูลสำรองไม่เสียหายหลังจากสร้างหรือเมื่อเวลาผ่านไป
  • ระบบไฟล์รองรับฮาร์ดลิงก์หรือไม่
  • ใส่ข้อมูลสำรองลงในไฟล์เก็บถาวรเดียวหรือใช้โครงสร้างไดเรกทอรี?

4. คอมไพล์อะไรให้กับเนื้อหาสำรอง

  • git gc --auto

    • เอกสาร: man git-gc
    • ทำความสะอาดและกระชับพื้นที่เก็บข้อมูล
  • git bundle --all

    • เอกสาร: man git-bundle, man git-rev-list
    • ปรมาณู = "Hot-Copy"
    • บันเดิลคือไฟล์ดัมพ์และสามารถใช้ได้โดยตรงกับ git (ตรวจสอบโคลน ฯลฯ )
    • รองรับการสกัดแบบเพิ่มหน่วย
    • ตรวจสอบได้ทางgit bundle verify.
  • git clone --mirror

    • เอกสาร: man git-clone, man git-fsck, ความแตกต่างระหว่าง git clone --mirror และ git clone --bare คืออะไร
    • ปรมาณู = "Hot-Copy"
    • กระจกเป็นที่เก็บคอมไพล์ที่แท้จริง
    • จุดประสงค์หลักของคำสั่งนี้คือการสร้างมิเรอร์ที่ใช้งานเต็มรูปแบบซึ่งจะดึงข้อมูลอัพเดตจากที่เก็บเดิมเป็นระยะ
    • รองรับฮาร์ดลิงก์สำหรับมิเรอร์ในระบบไฟล์เดียวกันเพื่อหลีกเลี่ยงการสิ้นเปลืองเนื้อที่
    • ตรวจสอบได้ทางgit fsck.
    • มิเรอร์สามารถใช้เป็นพื้นฐานสำหรับสคริปต์สำรองไฟล์แบบเต็ม

5. สำเนาเย็น

การสำรองข้อมูลเย็นสำเนาสามารถทำสำรองข้อมูลไฟล์เต็ม: ปฏิเสธทุกการเข้าถึงไปยัง Repos คอมไพล์ทำสำรองข้อมูลและอนุญาตให้เข้าถึงอีกครั้ง

  • ปัญหาที่เป็นไปได้
    • อาจไม่ใช่เรื่องง่ายหรือเป็นไปได้ที่จะปฏิเสธการเข้าถึงทั้งหมดเช่นการเข้าถึงที่แชร์ผ่านระบบไฟล์
    • แม้ว่า repo จะอยู่ในเครื่องไคลเอนต์เท่านั้นที่มีผู้ใช้คนเดียวผู้ใช้ก็ยังอาจกระทำบางอย่างในระหว่างการสำรองข้อมูลอัตโนมัติ :(
    • การหยุดทำงานอาจไม่เป็นที่ยอมรับบนเซิร์ฟเวอร์และการสำรองข้อมูล repos ขนาดใหญ่หลาย ๆ ครั้งอาจใช้เวลานาน
  • แนวคิดเพื่อการบรรเทา:
    • ป้องกันการเข้าถึง repo โดยตรงผ่านระบบไฟล์โดยทั่วไปแม้ว่าไคลเอนต์จะอยู่ในเครื่องเดียวกันก็ตาม
    • สำหรับการเข้าถึง SSH / HTTP ให้ใช้ตัวจัดการการอนุญาต git (เช่น gitolite) เพื่อจัดการการเข้าถึงแบบไดนามิกหรือแก้ไขไฟล์การพิสูจน์ตัวตนในรูปแบบสคริปต์
    • สำรอง repos ทีละรายการเพื่อลดเวลาหยุดทำงานสำหรับแต่ละ repo ปฏิเสธหนึ่ง repo ทำการสำรองข้อมูลและอนุญาตการเข้าถึงอีกครั้งจากนั้นดำเนินการต่อด้วย repo ถัดไป
    • มีการวางแผนกำหนดการบำรุงรักษาเพื่อหลีกเลี่ยงความไม่พอใจของนักพัฒนา
    • สำรองข้อมูลเฉพาะเมื่อที่เก็บมีการเปลี่ยนแปลง อาจจะยากมากที่จะนำไปใช้เช่นรายการวัตถุรวมทั้งการมี packfiles อยู่ในใจการตรวจสอบ config และ hooks เป็นต้น

6. Hot-Copy

การสำรองไฟล์ไม่สามารถทำได้ด้วย repos ที่ใช้งานอยู่เนื่องจากมีความเสี่ยงที่ข้อมูลจะเสียหายจากการกระทำต่อไป Hot-copy ให้สถานะคงที่ของที่เก็บที่ใช้งานอยู่เพื่อวัตถุประสงค์ในการสำรอง การกระทำต่อเนื่องไม่มีผลต่อสำเนานั้น ตามที่ระบุไว้ข้างต้นฟังก์ชันโคลนและบันเดิลของ git สนับสนุนสิ่งนี้ แต่สำหรับการสำรองข้อมูล "ผู้ดูแลระบบ 100%" จะต้องดำเนินการหลายอย่างผ่านคำสั่งเพิ่มเติม

"ผู้ดูแลระบบ 100%" สำเนาสำรอง

  • ตัวเลือกที่ 1: ใช้git bundle --allสร้างไฟล์ดัมพ์แบบเต็ม / ส่วนเพิ่มของเนื้อหาและคัดลอก / สำรองไฟล์คอนฟิกูเรชันแยกกัน
  • ตัวเลือกที่ 2: ใช้git clone --mirrorจัดการและคัดลอกการกำหนดค่าแยกกันจากนั้นทำการสำรองไฟล์แบบเต็มของมิเรอร์
    • หมายเหตุ:
    • มิเรอร์เป็นที่เก็บใหม่ที่เติมด้วยเทมเพลต git ปัจจุบันในการสร้าง
    • ล้างไฟล์คอนฟิกูเรชันและไดเร็กทอรีจากนั้นคัดลอกไฟล์คอนฟิกูเรชันจากที่เก็บซอร์สดั้งเดิม
    • สคริปต์สำรองอาจใช้การกำหนดค่าระบบปฏิบัติการเช่นการอนุญาตไฟล์บนมิเรอร์
    • ใช้ระบบไฟล์ที่รองรับฮาร์ดลิงก์และสร้างมิเรอร์บนระบบไฟล์เดียวกับที่เก็บซอร์สเพื่อเพิ่มความเร็วและลดการใช้พื้นที่ระหว่างการสำรองข้อมูล

7. คืนค่า

  • ตรวจสอบและนำการกำหนดค่าคอมไพล์ไปใช้กับเครื่องเป้าหมายและปรัชญา "วิธีดำเนินการ" ล่าสุด
  • ตรวจสอบและนำการกำหนดค่า OS ไปใช้กับเครื่องเป้าหมายและปรัชญา "วิธีดำเนินการ" ล่าสุด

3

คุณสามารถสำรอง git repo ด้วยgit-copyที่ขนาดพื้นที่จัดเก็บขั้นต่ำ

git copy /path/to/project /backup/project.repo.backup

จากนั้นคุณสามารถกู้คืนโครงการของคุณด้วย git clone

git clone /backup/project.repo.backup project

2
github.com/cybertk/git-copy/blob/master/bin/git-copy#L8-L36 : ที่ดูเหมือนว่าทำงานมากสำหรับง่าย+git clone --bare git push --force
VonC

@VonC ใช่ แต่อาจมีคุณสมบัติเพิ่มเติมบางอย่างในระหว่างการบรรจุใหม่หรือสามารถขุดโครงสร้างภายในของ git repo ซึ่งสามารถใช้สำหรับการเพิ่มประสิทธิภาพบางอย่าง (การปรับโครงสร้างปลายทางหรือการเพิ่มความเร็ว ฯลฯ )
peterh - คืนสถานะ Monica

3

คำตอบที่ถูกต้อง IMO เป็นคอมไพล์โคลน --mirror สิ่งนี้จะสำรองข้อมูล repo ของคุณอย่างสมบูรณ์

Git clone mirror จะโคลนที่เก็บโน้ตหัวอ้างอิง ฯลฯ ทั้งหมดและโดยทั่วไปจะใช้เพื่อคัดลอกที่เก็บทั้งหมดไปยังเซิร์ฟเวอร์ git ใหม่ สิ่งนี้จะดึงทุกสาขาและทุกอย่างลงในที่เก็บทั้งหมด

git clone --mirror git@example.com/your-repo.git
  • โดยปกติการโคลน repo จะไม่รวมทุกสาขาเฉพาะ Master

  • การคัดลอกโฟลเดอร์ repo จะ "คัดลอก" เฉพาะสาขาที่ถูกดึงเข้ามา ... ดังนั้นโดยค่าเริ่มต้นจะเป็นสาขาหลักเท่านั้นหรือสาขาอื่น ๆ ที่คุณเคยเช็คเอาต์ไว้ก่อนหน้านี้

  • คำสั่ง Git บันเดิลก็ไม่ใช่สิ่งที่คุณต้องการเช่นกัน: "คำสั่งบันเดิลจะรวมทุกอย่างที่ปกติจะถูกผลักผ่านสายด้วยคำสั่ง git push ลงในไฟล์ไบนารีที่คุณสามารถส่งอีเมลถึงใครบางคนหรือใส่แฟลชไดรฟ์จากนั้น เลิกรวมกลุ่มในที่เก็บอื่น " (จากความแตกต่างระหว่าง git clone --mirror และ git clone --bare คืออะไร )


git clone --mirror สร้างการสำรองข้อมูลแบบจุดต่อเวลาที่สอดคล้องกันหรือไม่ ผู้ใช้ผลักคอมมิตระหว่างการสำรองข้อมูลคืออะไร ถูกปฏิเสธจัดคิวหรือรวมอยู่ในข้อมูลสำรองหรือไม่
Benjamin Goodacre

0
cd /path/to/backupdir/
git clone /path/to/repo
cd /path/to/repo
git remote add backup /path/to/backupdir
git push --set-upstream backup master

สิ่งนี้จะสร้างการสำรองข้อมูลและทำการตั้งค่าเพื่อให้คุณสามารถกดคอมไพล์เพื่ออัปเดตข้อมูลสำรองของคุณสิ่งที่คุณต้องการทำ ตรวจสอบให้แน่ใจว่า / path / to / backupdir และ / path / to / repo เป็นฮาร์ดไดรฟ์ที่แตกต่างกันอย่างน้อยก็ไม่สมเหตุสมผลที่จะทำเช่นนั้น


ฉันคิดว่าเขารู้คำสั่งโคลนดีถ้าเขาสามารถถามคำถามดังกล่าวได้และชัดเจนว่ามันไม่เพียงพอสำหรับเขา (เพราะมันเป็นโคลนไม่ใช่การถ่ายโอนข้อมูล) การถ่ายโอนข้อมูลเป็นสิ่งที่แตกต่างกันเช่นเดียวกับสำเนาทั่วไปตัวอย่างเช่น 1) ไม่จำเป็นต้องมีความเหมาะสม (หรือมีความสามารถ) สำหรับการทำงานปกติ 2) แต่จำเป็นต้องมีความต้านทานและการซ่อมแซมที่ดีจากความเสียหายของข้อมูล 3) มักมีประโยชน์ หากสามารถสำรองข้อมูลส่วนเพิ่มที่แตกต่างกันได้อย่างง่ายดายในขณะที่ไม่ใช่เป้าหมายในการทำสำเนา
peterh - คืนสถานะ Monica

0

มีสองตัวเลือกดังนี้

  1. คุณสามารถใช้tarของไดเร็กทอรี git repo ได้โดยตรงเนื่องจากมีเนื้อหาเปล่าทั้งหมดของ repo บนเซิร์ฟเวอร์ มีความเป็นไปได้เล็กน้อยที่อาจมีใครบางคนกำลังทำงานกับ repo ในขณะที่ทำการสำรองข้อมูล

  2. คำสั่งต่อไปนี้จะให้โคลนของ repo (เช่นเดียวกับในเซิร์ฟเวอร์) จากนั้นคุณสามารถใช้ tar ของตำแหน่งที่คุณโคลนได้โดยไม่มีปัญหาใด ๆ

    git clone --bare {your backup local repo} {new location where you want to clone}
    

ฉันคิดว่าเขารู้คำสั่งโคลนหรือน้ำมันดินเป็นอย่างดีหากเขาสามารถถามคำถามดังกล่าวได้และเห็นได้ชัดว่ามันไม่เพียงพอสำหรับเขา (เพราะมันเป็นโคลนไม่ใช่การถ่ายโอนข้อมูล) การถ่ายโอนข้อมูลเป็นสิ่งที่แตกต่างกันเช่นเดียวกับสำเนาทั่วไปตัวอย่างเช่น 1) ไม่จำเป็นต้องมีความเหมาะสม (หรือมีความสามารถ) สำหรับการทำงานปกติ 2) แต่จำเป็นต้องมีความต้านทานและการซ่อมแซมที่ดีจากความเสียหายของข้อมูล 3) มักมีประโยชน์ หากสามารถสำรองข้อมูลส่วนเพิ่มที่แตกต่างกันได้อย่างง่ายดายในขณะที่ไม่ใช่เป้าหมายในการทำสำเนา
peterh - คืนสถานะ Monica

3
ปีเตอร์แน่นอนว่าเขาไม่ได้ขอคำสั่ง tar หรือ clone หากคุณดูอย่างใกล้ชิดฉันไม่ได้อธิบายคำสั่งเหล่านั้นเช่นกัน สิ่งที่ฉันพยายามอธิบายคือการสำรองข้อมูล Git ด้วยวิธีการอื่นซึ่งอาจรวมถึงคำสั่ง Linux ต่างๆซึ่งไม่ได้หมายความว่าฉันกำลังสอนคำสั่ง linux เหล่านั้น ฉันพยายามใส่ความคิดเล็กน้อยที่นี่
vishal sahasrabuddhe

0

หากอยู่ใน Github ให้ไปที่ bitbucket และใช้เมธอด "import repository" เพื่ออิมพอร์ต github repo ของคุณเป็นที่เก็บส่วนตัว

หากอยู่ใน bitbucket ให้ทำอีกทางหนึ่ง

เป็นการสำรองข้อมูลทั้งหมด แต่ยังคงอยู่ในระบบคลาวด์ซึ่งเป็นวิธีที่ดีที่สุดของฉัน


-7

เท่าที่ฉันรู้คุณสามารถทำสำเนาไดเร็กทอรีที่มี repo ของคุณได้แค่นั้นเอง!

cp -r project project-backup

ใครช่วยยืนยันได้ไหม ฉันรู้สึกว่านี่เป็นแนวทางที่ถูกต้องในการสำรองข้อมูลที่เหมาะสม
Ravindranath Akila

5
ฉันคิดว่าคุณอาจลงเอยด้วยสแนปชอตที่ไม่สอดคล้องกันเมื่อในระหว่างการดำเนินการคัดลอกการเปลี่ยนแปลงมีการยืนยัน / ผลักดันไปยังที่เก็บ การใช้คำสั่ง git เช่นgit clone --bareจะทำให้คุณได้ภาพรวมที่สอดคล้องกัน
Eelke

1
เห็นด้วยกับ Sunil - สิ่งนี้ดูเหมือนจะไม่ใช่ปรมาณู
jia103

1
@ jia103 ไม่ใช่ปัญหาเสมอไปหากไม่ใช่ปรมาณู - คุณเพียงแค่ต้องรู้และต้องมีความสามารถเพื่อรับประกันว่าจะไม่มีใครเข้าถึง repo ได้ในขณะที่คุณกำลังดำเนินการอยู่ แต่ฉันคิดว่า OP ต้องการเฉพาะสำหรับ git repos เครื่องมือที่ปรับให้เหมาะสมสำหรับงานการคัดลอกไฟล์อย่างง่ายอาจเป็นที่รู้จักกันดีสำหรับเขา
peterh - คืนสถานะ Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.