วิธีการแปลงที่เก็บ Git ปกติเป็นที่โล่ง?


602

ฉันจะแปลงพื้นที่เก็บข้อมูล Git 'ปกติ' เป็นพื้นที่ว่างเปล่าได้อย่างไร

ความแตกต่างที่สำคัญน่าจะเป็น:

  • ในพื้นที่เก็บข้อมูล Git ปกติคุณมี.gitโฟลเดอร์ในพื้นที่เก็บข้อมูลที่มีข้อมูลที่เกี่ยวข้องทั้งหมดและไฟล์อื่น ๆ ทั้งหมดที่ประกอบขึ้นเป็นสำเนาการทำงานของคุณ

  • ในพื้นที่เก็บข้อมูล Git เปลือยไม่มีสำเนาทำงานและโฟลเดอร์ (ลองเรียกมันว่าrepo.git) มีข้อมูลที่เก็บจริง


16
สันนิษฐานนี้เป็นวิธีที่สั้น:mv repo/.git repo.git; rm -rf repo
jameshfisher

ใช่จริง เมื่อฉันเขียนคำถามนี่เป็นเพียงตัวอย่างเล็ก ๆ น้อย ๆ ของประวัติศาสตร์ของฉันที่ฉันดำเนินการในนาทีอื่น ๆ
Boldewyn

54
@eegg ใช้&&แทน;ในกรณีที่mvล้มเหลว!

คำตอบ:


609

กล่าวโดยย่อ: แทนที่เนื้อหาrepoด้วยเนื้อหาของrepo/.gitจากนั้นบอกที่เก็บว่าตอนนี้เป็นที่เก็บข้อมูลเปล่า

หากต้องการทำสิ่งนี้ให้ดำเนินการคำสั่งต่อไปนี้:

cd repo
mv .git ../repo.git # renaming just for clarity
cd ..
rm -fr repo
cd repo.git
git config --bool core.bare true

โปรดทราบว่าสิ่งนี้แตกต่างจากการทำ a git clone --bareไปยังตำแหน่งใหม่ (ดูด้านล่าง)


9
core.bareขอบคุณสำหรับคำแนะนำที่ ตอนนี้หลังจาก googling ตัวเลือกนี้ฉันสามารถยืนยันได้: kernel.org/pub/software/scm/git-core/docs/git-config.html
Boldewyn

14
ขอบคุณ! สิ่งนี้ดูสะอาดสำหรับฉัน: mv repo / .git repo.git && rm -rf repo && cd repo.git && git config - บูล core.bare จริง
JasonWoof

56
นี่ซับซ้อนและบอบบางกว่าคำตอบด้านล่าง ( git clone --bare /path/to/repo)
djd

7
ว่าrmคำสั่งอาจต้อง* \.[!.]*มากกว่า*เพื่อที่จะลบจุดไฟล์และไดเรกทอรี dot
minopret

6
@Ciantic: อีกครั้งตามที่ฉันได้อธิบายไปแล้วในความคิดเห็นของฉันด้านบนคำตอบของฉันได้รับเมื่อ 3 ปีที่แล้ว แต่ 5 เดือนที่ผ่านมามีคนแก้ไขคำถามเป็นสิ่งที่แตกต่างอย่างสิ้นเชิง ไม่มีคำตอบในหน้านี้จะทำให้การใด ๆความรู้สึกอีกต่อไป ลำดับของคำสั่งนั้นถูกคัดลอกมาจากคำถามโดยตรงฉันเพิ่งเพิ่มสองบรรทัดสุดท้าย
Jörg W Mittag

244

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

git clone --bare /path/to/repo

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


50
ผิดวิธีนี้ไม่เทียบเท่า การโคลนจะไม่รักษาตัวเลือกการกำหนดค่าซึ่งอาจมีความสำคัญต่อการดำเนินการที่เหมาะสมเช่นถ้าคุณใช้ git-p4 นอกจากนี้โคลนทำลายรีโมทอีกครั้งด้วยบางสิ่งบางอย่างเช่น git-p4 คุณจะสูญเสียสาขา p4 / มาสเตอร์เมื่อคุณโคลนดังนั้นวิธีการข้างต้นจึงเป็นที่นิยมมากกว่า
nosatalian

26
แต่คุณสามารถถ่ายโอนตัวเลือกการกำหนดค่าได้อย่างง่ายดายโดยการคัดลอกส่วนต่าง ๆ ของไฟล์ปรับแต่ง ฉันยังคงพิจารณาวิธีนี้ให้สะอาดกว่าการคัดลอกและเปลี่ยนชื่อไฟล์ด้วยตนเอง
Philipp

6
นี่คือที่สมบูรณ์แบบหลังจากการโยกย้ายการโค่นล้มเนื่องจาก git-svn ขาดการสนับสนุน --bare
Keyo

11
เพื่อหลีกเลี่ยงความขัดแย้งชื่อ ---git clone --bare /path/to/repo.git /path/to/newbarerepo.git
raksja

ทำงานได้ตราบใดที่คุณเรียกใช้git update-server-inforepo เปลือยหลังจากการสร้าง
ACK_stoverflow

116

ฉันคิดว่าลิงค์ต่อไปนี้จะเป็นประโยชน์

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

$ mv repo/.git repo.git
$ git --git-dir=repo.git config core.bare true
$ rm -rf repo

2
ใช่ว่าเป็นสิ่งที่ฉันค้นหาขอบคุณ! อย่างไรก็ตามข้อเสนอที่สองของพวกเขา ( git clone) มีข้อเสียที่ nosatalian ดังกล่าวข้างต้น
Boldewyn

1
เอกสารที่คุณแนะนำบอกต่อไปว่า "วิธีที่ปลอดภัยกว่าคือการให้ Git จัดการการตั้งค่าภายในทั้งหมดให้คุณโดยทำสิ่งนี้ ... git clone --bare -l <path_to_repos> <new_dir>"
dafunker

74

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

git clone --bare existing_repo_path bare_repo_path


6
เป็นเรื่องที่น่าอัศจรรย์ใจที่คำตอบที่ดีที่สุดคือ 0 โหวตหลังจาก> 4 เดือน คำตอบที่ยอมรับไม่ดีมี 200 แบบ!
Stabledog

36
ไม่น่าอัศจรรย์เลย - คำตอบนี้ไม่ได้ทำในสิ่งที่คำถามเดิมถาม มันไม่ได้แปลง repo มันโคลนหนึ่งสูญเสียข้อมูลในกระบวนการ (เช่นสาขาระยะไกล)
GreenAsJade

15

โปรดพิจารณาการใช้

git clone --mirror path_to_source_repository

จากเอกสาร :

ตั้งค่ามิเรอร์ของแหล่งเก็บข้อมูลต้นฉบับ นี่หมายถึง - เปลือย เมื่อเทียบกับ --bare, - มิเรอร์ไม่เพียง แต่แมปสาขาท้องถิ่นของแหล่งที่มาไปยังสาขาในพื้นที่ของเป้าหมายมันจะจับคู่อ้างอิงทั้งหมด ถูกเขียนทับโดยการอัพเดตรีโมต git ในที่เก็บปลายทาง


ดูเหมือนว่านี่เป็นวิธีที่กระชับรัดกุมและปลอดภัยที่สุดในการทำสิ่งที่ OP ต้องการ (เทียบกับเพียงclone) ฉันพลาดอะไรไปรึเปล่า? เป็น--mirrorนอกจากนี้ล่าสุดค่อนข้าง?
Craig Silver

@CraigSilver: ไม่อย่างที่ฉันเห็นในประวัติเอกสารในรูปแบบดังกล่าว--mirrorจะมีให้ในรุ่น 1.7 ดังนั้นจึงค่อนข้างยาว คุณสามารถตรวจสอบได้ที่นี่
Jacek Krawczyk

7

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

git config --bool core.bare true

ไม่จำเป็นต้องเล่นกับไฟล์จนกว่าคุณจะต้องการรักษาความสะอาด


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

จริงคุณไม่ควรทำงานบนต้นไม้ของ repo เปล่าระยะไกล
Slion

6

ฉันได้อ่านคำตอบแล้วและฉันได้ทำสิ่งนี้แล้ว:

cd repos
mv .git repos.git
cd repos.git
git config --bool core.bare true # from another answer
cd ../
mv repos.git ../
cd ../
rm -rf repos/ # or delete using a file manager if you like

การทำเช่นนี้จะทำให้เนื้อหาของภาพrepos/.gitเหมือนเปลือยrepos.git


4

นี่คือสิ่งที่ฉันคิดว่าปลอดภัยและง่ายที่สุด ไม่มีอะไรที่นี่ไม่ได้ระบุไว้ข้างต้น ฉันแค่อยากเห็นคำตอบที่แสดงขั้นตอนที่ปลอดภัยทีละขั้นตอน คุณเริ่มหนึ่งโฟลเดอร์จากที่เก็บ (repo) ที่คุณต้องการสร้างเปลือย ฉันได้รับรองอนุสัญญาข้างต้นว่าโฟลเดอร์ที่เก็บเปล่ามีนามสกุล. git

(1) Backup, just in case.
    (a) > mkdir backup
    (b) > cd backup
    (c) > git clone ../repo
(2) Make it bare, then move it
    (a) > cd ../repo
    (b) > git config --bool core.bare true
    (c) > mv .git ../repo.git
(3) Confirm the bare repository works (optional, since we have a backup)
    (a) > cd ..
    (b) > mkdir test
    (c) > cd test
    (d) > git clone ../repo.git
(4) Clean up
    (a) > rm -Rf repo
    (b) (optional) > rm -Rf backup/repo
    (c) (optional) > rm -Rf test/repo

1
สิ่งนี้ไม่ปลอดภัยกว่านี้มากนักเนื่องจากคุณทำการสำรองข้อมูลโดยใช้ git clone การสำรองข้อมูลโดยการโคลนจะทำให้คุณสูญเสียการกำหนดค่าบางอย่างซึ่งในบางกรณีอาจมีความสำคัญสำหรับที่เก็บ
โกหกไรอัน

ข้อสังเกต. การกำหนดค่าเพียงอย่างเดียวที่ฉันเคยใส่ใจคือเป็นส่วนกลางสำหรับที่เก็บข้อมูลในเครื่องทั้งหมดของฉัน
sdesciencelover

4

เพียงแค่อ่าน

Pro Git Book: 4.2 Git บนเซิร์ฟเวอร์ - รับ Git บนเซิร์ฟเวอร์

ซึ่งเฟื่องฟูลงไป

$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.

จากนั้นนำmy_project.gitไปยังเซิร์ฟเวอร์

ซึ่งส่วนใหญ่เป็นสิ่งที่คำตอบ# 42พยายามที่จะชี้ให้เห็น ใครคนหนึ่ง ShFE สามารถบูรณาการล้อ ;-)


ผมไม่เห็นว่าคำตอบนี้จะเพิ่มที่ยังไม่ได้รับการกล่าวถึงความยาวโดยพลการในใด ๆของคำตอบอื่น ๆ (รวมทั้ง downvoted) คุณช่วยอธิบายได้ไหม? (โดยวิธีการ: Pro Git Book กล่าวว่า"นี่เป็นสิ่งที่เทียบเท่ากับสิ่งที่ชอบ ... "และการพูดถึงความเท่าเทียมกันอย่างคร่าวๆก็ถูกกล่าวถึงแล้วที่นี่)
Boldewyn

3

นี่คือฟังก์ชั่น BASH เล็กน้อยที่คุณสามารถเพิ่มลงใน. bashrc หรือ. profile ของคุณบนระบบที่ใช้ UNIX เมื่อเพิ่มและเปลือกจะเริ่มต้นใหม่หรือไฟล์จะถูกโหลดผ่านการเรียกร้องให้หรือsource ~/.profilesource ~/.bashrc

function gitToBare() {
  if [ -d ".git" ]; then
    DIR="`pwd`"
    mv .git ..
    rm -fr *
    mv ../.git .
    mv .git/* .
    rmdir .git

    git config --bool core.bare true
    cd ..
    mv "${DIR}" "${DIR}.git"

    printf "[\x1b[32mSUCCESS\x1b[0m] Git repository converted to "
    printf "bare and renamed to\n  ${DIR}.git\n"
    cd "${DIR}.git"
  else
    printf "[\x1b[31mFAILURE\x1b[0m] Cannot find a .git directory\n"
  fi
}

เมื่อเรียกภายในไดเรกทอรีที่มีไดเรกทอรี. git แล้วมันจะทำการเปลี่ยนแปลงที่เหมาะสมเพื่อแปลงพื้นที่เก็บข้อมูล หากไม่มีไดเร็กทอรี. git อยู่เมื่อถูกเรียกข้อความ FAILURE จะปรากฏขึ้นและจะไม่มีการเปลี่ยนแปลงระบบไฟล์เกิดขึ้น


1

วิธีที่บอกว่าจะลบไฟล์และโคลนเกี่ยวกับการย้ายไดเรกทอรี. git ไม่สะอาดและไม่ได้ใช้วิธี "git" ในการทำสิ่งที่ควรจะง่าย นี่เป็นวิธีที่สะอาดที่สุดที่ฉันพบว่าเปลี่ยน repo ปกติเป็น repo เปล่า

การเลียนแบบ / path / to / normal / repo เป็น repo เปล่าที่เรียกว่า repo.git

git clone --bare /path/to/normal/repo

ถัดไปลบต้นกำเนิดที่ชี้ไปที่ / path / to / normal / repo

cd repo.git
git remote rm origin

ในที่สุดคุณสามารถลบ repo เดิมของคุณ คุณสามารถเปลี่ยนชื่อ repo.git เป็น repo ได้ในตอนนั้น แต่แบบแผนมาตรฐานในการสื่อความหมาย git repository คือ something.git ดังนั้นฉันจะทิ้งมันไว้แบบนั้น

เมื่อคุณทำทุกอย่างเสร็จแล้วคุณสามารถโคลน repo ใหม่ของคุณ (ซึ่งมีผลในการสร้าง repo ปกติและเป็นวิธีที่คุณจะแปลงมันจากเปลือยเป็นปกติ)

แน่นอนถ้าคุณมี upstreams อื่น ๆ คุณจะต้องจดบันทึกพวกเขาและปรับปรุง repo เปล่าของคุณเพื่อรวมไว้ แต่ก็สามารถทำได้ด้วยคำสั่ง git จำหน้าคนเป็นเพื่อนของคุณ


1
คุณใส่ใจที่จะอ่านคำตอบอื่น ๆ ? โดยเฉพาะ @ jonescb's และความคิดเห็นของ @ nosatalian ไปหรือไม่ วิธีการ "git" คือ: "ทำได้มากที่สุดกับไฟล์ข้อความธรรมดา" คุณควรเริ่มตรวจสอบภายในของ.gitโฟลเดอร์ มันให้ความรู้สูงในการเรียนรู้ว่าชิ้นส่วนเข้าด้วยกันอย่างไร
Boldewyn

1

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

คุณสามารถทำสิ่งต่อไปนี้เพื่อบันทึกประวัติ

  1. สร้างพื้นที่เก็บข้อมูลเปลือย
  2. cd ลงในที่เก็บโลคัลซึ่งมีสาขาเช็กเอาต์เอาต์โลคัลและรีโมตสาขา
  3. git push / path / to / bare / repo + refs / remotes / origin / : refs / heads /

0

ฉันใช้สคริปต์ต่อไปนี้เพื่ออ่านไฟล์ข้อความที่มีรายการ repos SVN ทั้งหมดของฉันและแปลงเป็น GIT และใช้ git clone - ในภายหลังเพื่อแปลงเป็น repo git เปลือย

#!/bin/bash
file="list.txt"
while IFS= read -r repo_name
do
 printf '%s\n' "$repo_name"
 sudo git svn clone --shared --preserve-empty-dirs --authors-file=users.txt file:///programs/svn/$repo_name 
 sudo git clone --bare /programs/git/$repo_name $repo_name.git
 sudo chown -R www-data:www-data $repo_name.git
 sudo rm -rf $repo_name
done <"$file"

list.txt มีรูปแบบ

repo1_name
repo2_name

และ users.txt มีรูปแบบ

(no author) = Prince Rogers <prince.rogers.nelson@payesley.park.org>

www-data เป็นผู้ใช้เว็บเซิร์ฟเวอร์ Apache ต้องได้รับอนุญาตเพื่อผลักดันการเปลี่ยนแปลงผ่าน HTTP


0

นี่คือคำจำกัดความของพื้นที่เก็บข้อมูลเปลือยจากgitglossary :

โดยปกติแล้วพื้นที่เก็บข้อมูลเปล่าจะเป็นไดเรกทอรีที่มีชื่ออย่างเหมาะสมพร้อมด้วยคำต่อท้าย. git ที่ไม่มีสำเนาของไฟล์ใด ๆ ภายใต้การควบคุมการแก้ไข นั่นคือไฟล์การควบคุมและการควบคุม Git ทั้งหมดที่ปกติจะปรากฏในไดเรกทอรีย่อย. git ที่ซ่อนอยู่จะปรากฏในไดเรกทอรี repository.git โดยตรงแทนและไม่มีไฟล์อื่น ๆ โดยปกติผู้เผยแพร่ที่เก็บสาธารณะจะทำให้ที่เก็บข้อมูลเปลือยพร้อมใช้งาน

ฉันมาที่นี่เพราะฉันกำลังเล่นกับ "ที่เก็บในเครื่อง" และต้องการที่จะทำสิ่งที่ฉันต้องการราวกับว่ามันเป็นที่เก็บระยะไกล ฉันแค่เล่นไปรอบ ๆ พยายามเรียนรู้เกี่ยวกับคอมไพล์ ฉันจะสมมติว่านี่เป็นสถานการณ์สำหรับผู้ที่ต้องการอ่านคำตอบนี้

ฉันจะรักสำหรับความคิดเห็นของผู้เชี่ยวชาญหรือเฉพาะบางเคาน์เตอร์ตัวอย่าง แต่มันดูเหมือนว่า (หลังการค้นหาผ่านรหัสที่มาบางคอมไพล์ที่ผมพบว่า) เพียงแค่ไปยังแฟ้ม.git/configและการตั้งค่าหลักแอตทริบิวต์เปลือยเพื่อความจริง , คอมไพล์จะช่วยให้คุณทำสิ่งที่ คุณต้องการที่จะทำกับพื้นที่เก็บข้อมูลจากระยะไกล คือบรรทัดต่อไปนี้ควรมีอยู่.git/config :

[core]
    ...
    bare = true
...

(นี่เป็นคำสั่งคร่าวๆ git config --bool core.bare trueจะทำโดยประมาณซึ่งอาจแนะนำให้จัดการกับสถานการณ์ที่ซับซ้อนมากขึ้น)

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

int is_bare_repository(void)
{
    /* if core.bare is not 'false', let's see if there is a work tree */
    return is_bare_repository_cfg && !get_git_work_tree();
} 

ฉันไม่ได้เวลาหรือความเชี่ยวชาญในการพูดแบบนี้ด้วยความมั่นใจแน่นอน แต่เท่าที่ผมสามารถบอกได้ว่าคุณมีbareชุดแอตทริบิวต์trueใน.git/configนี้ควรกลับ1นี้ควรกลับฟังก์ชันที่เหลืออาจเป็นไปได้สำหรับสถานการณ์ต่อไปนี้:

  1. core.bare ไม่ได้ถูกกำหนด (เช่นไม่จริงหรือเท็จ)
  2. ไม่มี worktree (เช่นไดเรกทอรีย่อย. git เป็นไดเรกทอรีหลัก)

ฉันจะทดลองกับมันเมื่อฉันสามารถทำได้ในภายหลัง แต่ดูเหมือนว่าจะระบุว่าการตั้งค่าcore.bare = trueเทียบเท่ากับการลบ core.bareออกจากไฟล์กำหนดค่าและตั้งค่าไดเรกทอรีอย่างถูกต้อง

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


-1

ก่อนอื่นbackuprepo ที่คุณมีอยู่:

(a)  mkdir backup

(b)  cd backup

(c)  git clone non_bare_repo

ประการที่สองเรียกใช้ต่อไปนี้:

git clone --bare -l non_bare_repo new_bare_repo

โคลนระดับกลางมีไว้เพื่ออะไร
Stabledog

-4

Oneliner สำหรับการทำงานด้านบนทั้งหมด:

for i in `ls -A .`; do if [ $i != ".git" ]; then rm -rf $i; fi; done; mv .git/* .; rm -rf .git; git config --bool core.bare true

(อย่าโทษฉันถ้ามีอะไรเกิดขึ้นและคุณไม่มีข้อมูลสำรอง: P)


-9

ว้าวมันเป็นเรื่องที่น่าอัศจรรย์ใจที่มีคนจำนวนมากในเรื่องนี้โดยเฉพาะอย่างยิ่งเมื่อพิจารณาว่าไม่ได้มีคนหยุดพูดซักถามว่าทำไมคนคนนี้ถึงทำสิ่งที่เขาทำอยู่

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

ที่กล่าวว่าการแปลงเป็น repo เปล่าทั้งหมดที่คุณต้องทำคือให้แน่ใจว่าคุณไม่มีการกระทำที่ค้างอยู่แล้วเพียง:

rm -R * && mv .git/* . && rm -R .git

มีไปแล้ว repo เปล่า


11
สิ่งนี้จะไม่ทำให้มันเปลือยเปล่าพอ ลองผลักเข้าไป คุณต้องทำgit config core.bare trueเช่นกัน
Antony Hatchkins

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