Project vs Repository ใน GitHub


189

ใน GitHub ความแตกต่างทางแนวคิดระหว่างโครงการ (ที่สามารถสร้างขึ้นภายในที่เก็บ) และที่เก็บคืออะไร

ผมเคยเห็นคำถามที่คล้ายกันหลายคน ( ที่นี่ , ที่นี่และที่นี่ ) ใน SO แต่ไม่มีของพวกเขาอธิบายถึงสิ่งที่เป็นโครงการ GitHub สิ่งที่เป็นที่เก็บ GitHub และเมื่อใช้หนึ่งของพวกเขาแต่ละคน

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


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

1
คุณบอกว่าคุณเคยเห็นคำถามที่คล้ายกัน แต่คุณได้อ่านลิงก์แรกของคุณหรือไม่ "นั่นคือเรื่องอื้อฉาวไม่ใช่เรื่องคอมไพล์คุณสามารถมีที่เก็บได้หลายรายการต่อโครงการ" และคำตอบอื่นในเธรดเดียวกันนั้น "Git ไม่มีสิ่งเช่นโครงการ, ที่เก็บเท่านั้น" หากคุณหมายถึงโครงการ GitHub จริง ๆ ฉันขอแนะนำให้ตรวจสอบเอกสาร GitHub เกี่ยวกับมันhelp.github.com/articles/ …
PeeHaa

6
@PeeHaa ใช่ฉันทำ ประโยคแรกที่กล่าวถึงสิ่งนี้: "นั่นคือเรื่องอื้อฉาวไม่ใช่เรื่องคอมไพล์คุณสามารถมีที่เก็บหลายรายการต่อโครงการ" ฉันพูดถึง Gitorius ไม่ใช่ GitHub นอกจากนี้ยังกล่าวว่าใน Gitorious คุณสามารถมีที่เก็บได้หลายรายการต่อโครงการ แต่ใน GitHub เป็นวิธีอื่น ดังนั้นฉันจะขอบคุณจริงๆถ้าคุณสามารถอธิบายได้ว่าสิ่งนี้ตอบคำถามของฉันได้อย่างไร
carlossierra

2
ฉันคิดว่าสิ่งนี้มีความหมายเกี่ยวกับความหมายซึ่งฟีเจอร์ใหม่ Project - the visual board - ขัดแย้งกับการใช้งานมากเกินไปของ Project term การลงคะแนนเสียงมีแนวโน้มว่านี่ไม่ใช่คำถามการเขียนโปรแกรม
osowskit

2
สิ่งนี้ควรมีทุกสิ่งที่คุณต้องการgithub.com/blog/…
osowskit

คำตอบ:


110

GitHub เมื่อเร็ว ๆ นี้แนะนำคุณลักษณะใหม่ที่เรียกว่าโครงการ นี่เป็นบอร์ดภาพที่เป็นปกติของเครื่องมือการจัดการโครงการหลายอย่าง:

โครงการ

พื้นที่เก็บข้อมูลเป็นเอกสารบน GitHub:

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

โครงการเป็นเอกสารบน GitHub:

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

ส่วนหนึ่งของความสับสนคือฟีเจอร์ใหม่โครงการขัดแย้งกับการใช้งานที่มากเกินไปของโปรเจ็กต์คำในเอกสารด้านบน


1
ดังนั้นฉันใช้ Github เพื่อเก็บรหัสสำหรับโครงการวิจัยส่วนตัว A, B, C ฯลฯ ถ้าฉันเข้าใจอย่างถูกต้องโครงการวิจัยแต่ละโครงการจะได้รับที่เก็บของตัวเอง ดังนั้นได้รับพื้นที่เก็บข้อมูล B ได้รับพื้นที่เก็บข้อมูล C ได้รับพื้นที่เก็บข้อมูล ฯลฯ ?
Plinth

เมื่อคุณแยกพื้นที่เก็บข้อมูลส้อมของคุณมีสิทธิ์เข้าถึงสแนปชอตของบอร์ดโครงการหรือไม่
geominded

7
วิธีนี้ถูกเลือกให้เป็นคำตอบที่ยอมรับได้อย่างไร เพียงคัดลอกวางสิ่งที่อธิบายไว้ มันสามารถอ่านได้โดย OP แต่คนต้องการรู้ด้วยตัวอย่างง่ายๆ
batmaci

152

ความเป็นจริง 1: โครงการและพื้นที่เก็บข้อมูลเป็นคำพ้องความหมายเสมอใน GitHub

ความจริงที่ 2: นี่ไม่ใช่กรณีอีกต่อไป

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

ไม่อีกแล้ว.

ปัจจุบัน repos และโครงการอ้างถึงเอนทิตีประเภทต่าง ๆที่มีAPI แยกต่างหาก :

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

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

คำที่มักจะชัดเจนคือ"คณะกรรมการโครงการ"

เราเรียนรู้อะไรจาก API

จุดสิ้นสุดแรกในเอกสารของ Projects API:

เป็น: รายการโครงการพื้นที่เก็บข้อมูล หมายความว่าพื้นที่เก็บข้อมูลสามารถมีหลายโครงการ ดังนั้นทั้งสองไม่สามารถหมายถึงสิ่งเดียวกัน มันรวมถึงการตอบสนองหากโครงการถูกปิดใช้งาน :

{
  "message": "Projects are disabled for this repo",
  "documentation_url": "https://developer.github.com/v3"
}

ซึ่งหมายความว่าบาง repos สามารถปิดการใช้งานโครงการ อีกครั้งสิ่งเหล่านั้นจะไม่เหมือนเดิมเมื่อ repo สามารถปิดการใช้งานโครงการได้

มีปลายทางที่น่าสนใจอื่น ๆ :

  • สร้างโครงการที่เก็บ -POST /repos/:owner/:repo/projects
  • สร้างโครงการองค์กร -POST /orgs/:org/projects

แต่ไม่มี :

  • สร้างโครงการของผู้ใช้ -POST /users/:user/projects

ซึ่งทำให้เราแตกต่าง:

1. ที่เก็บข้อมูลสามารถเป็นของผู้ใช้หรือองค์กร
2. โครงการสามารถเป็นของที่เก็บหรือองค์กร

หรือที่สำคัญกว่า:

1. โปรเจ็กต์สามารถเป็นของที่เก็บข้อมูล แต่ไม่ใช่ในทางกลับกัน
2. โปรเจ็กต์สามารถเป็นขององค์กร แต่ไม่ใช่สำหรับผู้ใช้
3. ที่เก็บข้อมูลสามารถเป็นขององค์กรและผู้ใช้งานได้

ดูสิ่งนี้ด้วย:

ฉันรู้ว่ามันสับสน ฉันพยายามอธิบายอย่างแม่นยำที่สุดเท่าที่จะทำได้


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

ในทางใดทางหนึ่งมันจะเหมาะสมกว่าสำหรับฉันหากโครงการหนึ่งอาจมีคลังเก็บหลายแห่ง ฉันอยู่ภายใต้ความประทับใจที่ GitHub สังเกตเห็นว่าอายุมากขึ้นและแทนที่จะออกแบบใหม่อย่างสมบูรณ์เพียงแค่เลือกที่จะแก้ไขปัญหาและขายมันเป็นสิ่งที่ดี ตอนนี้ใครเป็นเจ้าของ GitHub ล่ะ บางทีคำตอบอาจให้เบาะแสเกี่ยวกับสาเหตุที่เกิดขึ้น แค่คิดออกมาดัง ๆ
Almir Campos

19

GitHub Repositories ใช้เพื่อจัดเก็บไฟล์โฟลเดอร์และทรัพยากรอื่น ๆ ทั้งหมดที่คุณใส่ใจ

โครงการ Git: มันเป็นหนึ่งในทรัพยากรใน Git Repository และการใช้งานหลักของมันคือการจัดการโครงการด้วย visual board หากคุณสร้างโครงการใน Git Repository มันจะสร้างบอร์ดเสมือนเช่นบอร์ด Kanban เพื่อจัดการโครงการ

ด้วยวิธีนี้คุณสามารถมีหลายโครงการในที่เก็บ


4

โดยทั่วไปบน GitHub, 1 = 1 พื้นที่เก็บข้อมูลโครงการ ตัวอย่างเช่น: https://github.com/spring-projects/spring-boot แต่มันก็ไม่ใช่กฎที่ยากนัก

พื้นที่เก็บข้อมูล 1 = หลายโครงการ ตัวอย่างเช่น: https://github.com/donhuvy/java_examples

1 โครงการ = เก็บจำนวนมาก ตัวอย่างเช่น: https://github.com/zendframework/zendframework (1 โครงการชื่อ Zend Framework 3 มี 61 + 1 = 62 ที่เก็บไม่เชื่ออย่าปล่อยให้นับโมดูลของ Zend Framework + ที่เก็บหลัก)

ฉันเห็นด้วยกับความคิดเห็นของ@Brandon Ibbotson ทั้งหมด :

พื้นที่เก็บข้อมูล GitHub เป็นเพียง "ไดเรกทอรี" ที่โฟลเดอร์และไฟล์สามารถมีอยู่


ขอบคุณสำหรับคำตอบของคุณ แต่ฉันไม่คิดว่าคำจำกัดความของโครงการคือสิ่งที่ GitHub เรียกโครงการเนื่องจากตัวอย่างของที่เก็บหลายโครงการไม่แสดงอะไรในแท็บโครงการสำหรับที่เก็บเหล่านั้น คุณช่วยอธิบายเรื่องนี้ให้ละเอียดหน่อยได้ไหม?
carlossierra

2
ที่จริงแล้วตัวอย่างการใช้ Zend Framework นั้นผิดทั้งหมด! ตามศัพท์เฉพาะของ GitHub มีองค์กรชื่อ "zendframework" ซึ่งเป็นเจ้าของคลังเก็บข้อมูลจำนวนมากรวมถึงหนึ่งชื่อ "zendframework" และอีกหนึ่งหน่วยสำหรับแต่ละโมดูลของกรอบงาน
igorcadelima

3
9 พ.ย. 2017: ตัวอย่างของ1 พื้นที่เก็บข้อมูล = หลายโปรเจ็กต์ส่งคืน 404
Bram Vanroy

1
ลิงก์เสียหาย
Pmpr

1
ในแง่ของ GitHub คำตอบนี้ขัดแย้งกับคำตอบที่ได้รับความนิยมมากกว่าข้างบน
Manohar Reddy Poreddy

1

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


1

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

มันสมเหตุสมผลไหม repo ขนาดใหญ่สามารถมีโครงการจำนวนมากที่ทำงานโดยคนที่แตกต่างกันในเวลาเดียวกัน (คุณสมบัติที่แตกต่างมากมายถูกเพิ่มเข้าไปใน monolith) โครงการขนาดใหญ่อาจมี repos ขนาดเล็กจำนวนมากที่แยกจากกัน แต่เป็นส่วนหนึ่งของโครงการเดียวกันที่โต้ตอบกับแต่ละโครงการ อื่น ๆ - บริการขนาดเล็ก? มันเป็นเรื่องส่วนตัวในสิ่งที่คุณต้องการจะทำ ฉันคิดว่า repo (พื้นที่เก็บข้อมูล) vs project (task) เป็นข้อแตกต่างที่สำคัญ - ถ้าฉันผิดโปรดแจ้งให้เราทราบ / อธิบาย! ขอบคุณ


0

นี่คือความเข้าใจส่วนตัวของฉันเกี่ยวกับหัวข้อ

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

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

  1. จัดการโดยหนึ่งที่เก็บ หากมีการเปลี่ยนแปลงหนึ่งในแอปพลิเคชั่นโครงการทั้งหมด (แอปพลิเคชันทั้งหมด) จะถูกกำหนดให้เป็นเวอร์ชั่นใหม่

  2. จัดการโดยที่เก็บหลายแห่ง หากมีการเปลี่ยนแปลงแอปพลิเคชันเดียวจะมีผลกับที่เก็บซึ่งจัดการแอปพลิเคชันเท่านั้น เวอร์ชันสำหรับที่เก็บอื่นไม่ถูกเปลี่ยน

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