คุณโคลนที่เก็บ Git ลงในโฟลเดอร์ที่ต้องการได้อย่างไร


2244

การดำเนินการคำสั่งgit clone git@github.com:whateverจะสร้างไดเรกทอรีในโฟลเดอร์ปัจจุบันของฉันชื่อwhateverและวางเนื้อหาของที่เก็บ Git ลงในโฟลเดอร์นั้น:

/httpdocs/whatever/public

ปัญหาของฉันคือฉันต้องการเนื้อหาของที่เก็บ Git ที่โคลนในไดเรกทอรีปัจจุบันของฉันเพื่อให้ปรากฏในตำแหน่งที่เหมาะสมสำหรับเว็บเซิร์ฟเวอร์:

/httpdocs/public

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


3
ใน Windows คุณสามารถย้ายไฟล์จากโฟลเดอร์ที่คุณจะซื้อคืนโคลน [ถ้ามี] ดังนั้นจึงเป็นที่ว่างเปล่าเมื่อคุณทำโคลนคอมไพล์ หลังจากโคลนย้ายไฟล์ของคุณกลับ [ctrl-z] และwhoala ! ถ้าโฟลเดอร์ปัจจุบันคือการใช้เพียงแค่ที่ว่างเปล่า: คอมไพล์โคลน giturl

44
voilaคือการสะกดคำ
Matthias

81
@MatthiasDailey voilàคือการสะกดคำที่แท้จริง
Silkfire

6
et voilàเป็นภาษาฝรั่งเศสสำหรับ et voilà
Fattie

คำตอบ:


3220

ตัวเลือก A:

git clone git@github.com:whatever folder-name

Ergo สำหรับการright hereใช้งาน:

git clone git@github.com:whatever .

ตัวเลือก B:

ย้าย.gitโฟลเดอร์ด้วย โปรดทราบว่า.gitโฟลเดอร์ถูกซ่อนอยู่ใน explorers ไฟล์กราฟิกส่วนใหญ่ดังนั้นโปรดแสดงไฟล์ที่ซ่อนอยู่

mv /where/it/is/right/now/* /where/I/want/it/
mv /where/it/is/right/now/.* /where/I/want/it/

บรรทัดแรกจะคว้าไฟล์ปกติทั้งหมดและบรรทัดที่สองจะคว้าไฟล์ดอท นอกจากนี้ยังเป็นไปได้ที่จะทำในบรรทัดเดียวด้วยการเปิดใช้งาน dotglob (เช่นshopt -s dotglob) แต่นั่นอาจเป็นทางออกที่ไม่ดีหากคุณถามคำถามคำตอบนี้

ดีกว่า:

เก็บสำเนางานของคุณไว้ที่อื่นและสร้างลิงก์สัญลักษณ์ แบบนี้:

ln -s /where/it/is/right/now /the/path/I/want/to/use

สำหรับคุณกรณีนี้จะเป็นสิ่งที่ชอบ:

ln -sfn /opt/projectA/prod/public /httpdocs/public

ซึ่งสามารถเปลี่ยนได้อย่างง่ายดายเพื่อทดสอบหากคุณต้องการคือ:

ln -sfn /opt/projectA/test/public /httpdocs/public

โดยไม่ต้องย้ายไฟล์ไปรอบ ๆ เพิ่ม-fnในกรณีที่มีคนกำลังคัดลอกบรรทัดเหล่านี้ (-fบังคับให้ -nหลีกเลี่ยงการโต้ตอบที่ไม่ต้องการด้วยลิงก์ที่มีอยู่แล้วและที่ไม่มีอยู่)

หากคุณต้องการให้มันใช้งานได้ให้ใช้ตัวเลือกกถ้าคนอื่นดูสิ่งที่คุณทำให้ใช้ตัวเลือก C


8
ฉันไม่ได้คิดถึงตัวเลือก 'ดีกว่ายัง' ของคุณและฉันชอบมันแม้ว่าฉันจะไม่แน่ใจว่าทำไม อะไรคือข้อดีของสิ่งนี้
David Smith

6
มันอาจไม่ได้ให้ประโยชน์ใด ๆ เลยในตอนนี้ แต่มันอาจช่วยให้คุณประหยัดได้มากถ้าคุณตัดสินใจที่จะย้ายสิ่งต่าง ๆ รอบ ๆ บางวัน
Berk Güderสามารถ

12
นอกจากนี้คุณสามารถสลับไปมาระหว่างการวางจำหน่ายได้อย่างรวดเร็วด้วยตัวเลือก "ดียิ่งขึ้น" สิ่งนี้มีประโยชน์อย่างยิ่งและใช้สำหรับเซิร์ฟเวอร์
Halil Özgür

4
@MEM ฉันคิดว่าเขาหมายถึงสร้างลิงก์สัญลักษณ์ไปยัง. git ieln -s path/to/.git path/to/working/directory
Alexander

27
ทุกคนสามารถอธิบายถึงประโยชน์ของสิ่งนี้ได้หรือไม่? วันนี้ฉันหนาแน่นไปหน่อย การใช้เซิร์ฟเวอร์ symlink เป็นประโยชน์อย่างไร
สาม

586

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

git clone git@github.com:whatever .

ส่วน "." ในตอนท้ายระบุโฟลเดอร์ปัจจุบันเป็นโฟลเดอร์เช็คเอาต์


28
จริงดังนั้นคุณไม่ต้องการเรียกใช้ "git init" ในโฟลเดอร์นี้ก่อนทำการโคลน แต่ถ้าคุณทำแล้วลบโฟลเดอร์. git ก่อนการโคลนจะทำเคล็ดลับ
Magne

3
คงที่สำหรับไดเรกทอรีว่างในคำตอบของฉัน
csomakk

1
ไม่สามารถใช้งาน nitrous.io ได้ใช่ไหม แม้หลังจากล้างมันบอกว่าไดเรกทอรีไม่ว่างเปล่า
Tejas Manohar

@TejasManohar ตรวจสอบให้แน่ใจว่าคุณได้ลบไฟล์ที่ซ่อนอยู่เช่นกัน
Britic

ls -aจะแสดงไฟล์ทั้งหมดรวมถึงไฟล์ที่ซ่อนอยู่
Michael Dorst

215

ไปที่โฟลเดอร์ .. หากโฟลเดอร์ว่างเปล่า:

git clone git@github.com:whatever .

อื่น

git init
git remote add origin PATH/TO/REPO
git fetch
git checkout -t origin/master

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

13
เฉพาะคำตอบที่ระบุวิธีการชำระเงินในโฟลเดอร์ที่ไม่ว่างขอขอบคุณ
Preston Badeer

2
นี้จะเป็นประโยชน์จริงๆเป็นswitch -tบนไม่ได้แสดงให้เห็นอย่างชัดเจนในเอกสารของเช็คเอาต์คอมไพล์
Chetabahana

4
สวิตช์ -t ทำหน้าที่อะไร ฉันได้รับข้อความยกเลิกพร้อมรายชื่อไฟล์ที่ไม่ได้ติดตามซึ่งจะถูกเขียนทับโดยเช็คเอาต์? สิ่งที่ต้องทำในสถานการณ์เช่นนี้? ฉันไม่ต้องการให้ไฟล์เหล่านั้นถูกเขียนทับหรือไม่?
Momin Zahid

2
-t เอกสารจาก git: -t, --track เมื่อสร้างสาขาใหม่ให้ตั้งค่าการกำหนดค่า "upstream" ดูที่ "- แทร็ก" ใน git-branch (1) สำหรับรายละเอียด
csomakk

87

การโคลนที่เก็บ Git ขั้นพื้นฐาน

คุณโคลนที่เก็บด้วย

git clone [url]

ตัวอย่างเช่นหากคุณต้องการโคลนห้องสมุด Git ของ Stanford University Drupal Open Framework ที่เรียกว่า open_framework คุณสามารถทำเช่นนี้ได้:

$ git clone git://github.com/SU-SWS/open_framework.git

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

การโคลนที่เก็บข้อมูลลงในโฟลเดอร์เฉพาะที่

หากคุณต้องการโคลนที่เก็บลงในไดเรกทอรีชื่ออย่างอื่นที่ไม่ใช่ open_framework คุณสามารถระบุว่าเป็นตัวเลือกบรรทัดคำสั่งถัดไป:

$ git clone git:github.com/SU-SWS/open_framework.git mynewtheme

คำสั่งนั้นทำสิ่งเดียวกันกับไดเรกทอรีก่อนหน้า แต่ไดเรกทอรีเป้าหมายเรียกว่า mynewtheme

Git มีโปรโตคอลการถ่ายโอนที่แตกต่างกันจำนวนหนึ่งซึ่งคุณสามารถใช้ได้ ตัวอย่างก่อนหน้านี้ใช้โปรโตคอล git: // แต่คุณอาจเห็น http (s): // หรือ user @ server: /path.git ซึ่งใช้โปรโตคอลการถ่ายโอน SSH


สิ่งนี้จะสร้างโฟลเดอร์ในโฟลเดอร์ปัจจุบันของคุณโดยอัตโนมัติและวางไฟล์ไว้ที่นั่น ดังนั้นคุณไม่ต้องกังวลกับการเขียนทับโฟลเดอร์อื่น ๆ
arn-arn

24

หากต้องการโคลนที่เก็บ git ลงในโฟลเดอร์เฉพาะคุณสามารถใช้-C <path>พารามิเตอร์เช่น

git -C /httpdocs clone git@github.com:whatever

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

cd /httpdocs
git clone git@github.com:whatever .

โปรดทราบว่าการโคลนลงในไดเรกทอรีที่มีอยู่จะได้รับอนุญาตเฉพาะเมื่อไดเรกทอรีว่างเปล่าที่ว่างเปล่า

เนื่องจากคุณทำการโคลนนิ่งในโฟลเดอร์ที่สาธารณชนสามารถเข้าถึงได้ให้พิจารณาแยกที่เก็บ Git ของคุณจากแผนผังการทำงานโดยใช้--separate-git-dir=<git dir>หรือแยก.gitโฟลเดอร์ในการกำหนดค่าเว็บเซิร์ฟเวอร์ของคุณ (เช่นใน.htaccessไฟล์)


17

วิธีโคลนเพื่อนำเสนอไดเรกทอรีการทำงาน :

git clone https://github.com/link.git

หากต้องการโคลนไปยังไดเรกทอรีอื่น :

git clone https://github.com/link.git ./Folder1/Folder2

หวังว่าจะช่วย :)


มันก็ใช้ได้กับฉันเช่นกัน ไม่ใช่./ที่จุดเริ่มต้นของเส้นทางไปยังโฟลเดอร์
Alon Gouldman

13

เมื่อคุณย้ายไฟล์ไปยังตำแหน่งที่คุณต้องการคุณจะย้ายไฟล์ .gitไดเรกทอรีด้วยหรือไม่ ไดเรกทอรีนี้อาจซ่อนอยู่ทั้งนี้ขึ้นอยู่กับระบบปฏิบัติการและการกำหนดค่าของคุณ

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


13

Clone:

git clone git@jittre.unfuddle.com:jittre/name.git

โคลน "สาขาเฉพาะ":

git clone -b [branch-name] git@jittre.unfuddle.com:jittre/name.git

13

หากคุณต้องการโคลนเข้าไปในโฟลเดอร์ปัจจุบันคุณควรลองทำสิ่งนี้:

git clone https://github.com/example/example.git ./

8
ร้ายแรง: เส้นทางปลายทาง '.' มีอยู่แล้วและไม่ใช่ไดเรกทอรีว่าง
Cleiton

11

การใช้

git clone <repository>

โคลนที่เก็บที่อยู่ที่ <repository> บนเครื่องโลคัล ที่เก็บต้นฉบับสามารถอยู่บนระบบไฟล์โลคัลหรือบนเครื่องรีโมตที่เข้าถึงได้ผ่าน HTTP หรือ SSH

git clone <repo> <directory>

โคลนที่เก็บข้อมูลที่อยู่ที่ <repository> ลงในโฟลเดอร์ที่ชื่อว่า <directory> บนเครื่องท้องถิ่น

ที่มา: การตั้งค่าที่เก็บ


9

ตรวจสอบให้แน่ใจว่าคุณได้ลบที่เก็บ. git หากคุณพยายามตรวจสอบสิ่งต่างๆลงในไดเรกทอรีปัจจุบัน

rm -rf .git แล้วก็ git clone https://github.com/symfony/symfony-sandbox.git


3

นี่คือวิธีที่ฉันจะทำ แต่ฉันได้ทำนามแฝงที่จะทำเพื่อฉัน

$ cd ~Downloads/git; git clone https:git.foo/poo.git

อาจมีวิธีที่สง่างามกว่านี้ในการทำเช่นนี้อย่างไรก็ตามฉันพบว่าวิธีนี้ง่ายที่สุดสำหรับฉัน

นี่คือนามแฝงที่ฉันสร้างขึ้นเพื่อเร่งความเร็วสิ่งต่างๆ ฉันทำเพื่อ zsh แต่ควรใช้งานได้ดีสำหรับทุบตีหรือเปลือกอื่น ๆ เช่นปลา, xyzsh, fizsh และอื่น ๆ

แก้ไข~/.zshrc, /.bashrcฯลฯ ด้วยการแก้ไขที่คุณชื่นชอบ (ฉันเป็น Leafpad ดังนั้นฉันจะเขียน$ leafpad ~/.zshrc)

อย่างไรก็ตามความชอบส่วนตัวของฉันคือการสร้างปลั๊กอิน zsh เพื่อติดตามนามแฝงทั้งหมดของฉัน คุณสามารถสร้างปลั๊กอินส่วนบุคคลสำหรับ oh-my-zsh โดยใช้คำสั่งเหล่านี้:

$ cd ~/.oh-my-zsh/
$ cd plugins/
$ mkdir your-aliases-folder-name; cd your-aliases-folder-name
     # In my case '~/.oh-my-zsh/plugins/ev-aliases/ev-aliases'
$ leafpad your-zsh-aliases.plugin.zsh
     # Again, in my case 'ev-aliases.plugin.zsh'

หลังจากนั้นเพิ่มบรรทัดเหล่านี้ลงในไฟล์ alises.plugin เปล่าที่สร้างขึ้นใหม่ของคุณ:

# Git aliases
alias gc="cd ~/Downloads/git; git clone "

(จากที่นี่เปลี่ยนชื่อของคุณเป็นของฉัน)

จากนั้นเพื่อให้นามแฝงทำงานได้พวกเขา (พร้อมกับ zsh) จะต้องมีแหล่งที่มา (หรือสิ่งที่เรียกว่า) ในการทำเช่นนั้นภายในเอกสารปลั๊กอินที่กำหนดเองของคุณเพิ่มสิ่งนี้:

## Ev's Aliases

#### Remember to re-source zsh after making any changes with these commands:

#### These commands should also work, assuming ev-aliases have already been sourced before:

allsource="source $ZSH/oh-my-zsh.sh ; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh; clear"
sourceall="source $ZSH/oh-my-zsh.sh ; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh"
#### 

####################################

# git aliases

alias gc="cd ~/Downloads/git; git clone "
# alias gc="git clone "
# alias gc="cd /your/git/folder/or/whatever; git clone "

####################################

บันทึกของคุณ Oh-My-zsh allsourceปลั๊กอินและเรียกใช้ source $ZSH/oh-my-zsh.sh; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zshหากไม่ได้ดูเหมือนจะทำงานเพียงแค่เรียกใช้ ที่จะโหลดซอร์สปลั๊กอินซึ่งจะทำให้คุณสามารถใช้งานได้allsourceนับจากนี้


ฉันอยู่ระหว่างการสร้างที่เก็บ Git พร้อมนามแฝงทั้งหมดของฉัน โปรดอย่าลังเลที่จะตรวจสอบพวกเขาออกจากที่นี่: Ev ของจุดไฟล์ โปรดแยกและปรับปรุงตามความต้องการของคุณ


2

หากคุณกำลังใช้sshงานอยู่git cloningคุณสามารถใช้คำสั่งต่อไปนี้

git -C path clone git@github.com:path_to_repo.git

เช่น git -C /home/ubuntu/ clone git@github.com:kennethreitz/requests.gitจะดึงที่เก็บ git สำหรับเส้นทางrequestsของคุณ/home/ubuntu/


2

จากเหตุผลบางอย่างไวยากรณ์นี้ไม่ได้โดดเด่น:

git clone repo-url [folder]

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

Git cloneจะpullโค้ดจากที่เก็บรีโมตลงในที่เก็บโลคัล ในความเป็นจริงมันเป็นความจริง:

git clone repo-url  =  git init + git remote add origin repo-url + git pull

0

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

มันเกี่ยวกับการกำหนดค่าโฮสต์เสมือนของเว็บเซิร์ฟเวอร์ของคุณโดยตรงซึ่งชี้ไปยังไดเรกทอรีที่เก็บ ใน Apache คุณสามารถทำได้เช่น:

DocumentRoot / var / www / html / เว็บไซต์ / your-git-repo

นี่คือตัวอย่างของไฟล์โฮสต์เสมือน:

<VirtualHost *:443>
    ServerName example.com

    DocumentRoot /path/to/your-git-repo
    ...
    ...
    ...
    ...
</VirtualHost>

0

คุณสามารถใช้คำสั่ง git ต่อไปนี้เพื่อโคลนด้วยชื่อไดเรกทอรีที่กำหนดเอง

git clone <git_repo_url> <your_custom_directory_name>

หมายเหตุ:คุณไม่จำเป็นต้องสร้างไดเรกทอรี customeเพราะมันจะสร้างขึ้นโดยอัตโนมัติ


-1
For Windows user 

1> Open command prompt.
2> Change the directory to destination folder (Where you want to store your project in local machine.)
3> Now go to project setting online(From where you want to clone)
4> Click on clone, and copy the clone command.
5> Now enter the same on cmd .

It will start cloning saving on the selected folder you given .

-5

เกี่ยวกับบรรทัดนี้จากโพสต์ต้นฉบับ:

"ฉันรู้วิธีย้ายไฟล์หลังจากที่ฉันคัดลอก repo มาแล้ว แต่ดูเหมือนว่ามันจะพัง"

ฉันสามารถทำสิ่งนั้นได้และฉันไม่เห็นปัญหาใด ๆ ที่เกิดขึ้นกับการเพิ่มกระทำการผลักและดึงของฉัน

วิธีการนี้ระบุไว้ข้างต้น แต่ไม่ได้แยกออกเป็นขั้นตอน นี่คือขั้นตอนที่เหมาะกับฉัน:

  1. โคลน repo ลงในโฟลเดอร์ชั่วคราวใหม่
  2. cd ในโฟลเดอร์รูทนั้นที่คุณเพิ่งทำการโคลน
  3. คัดลอกเนื้อหาทั้งหมดของโฟลเดอร์รวมถึงไดเรกทอรี /.git - ไปยังโฟลเดอร์ที่มีอยู่ที่คุณต้องการ; (พูดโครงการ eclipse ที่คุณต้องการรวมกับ repo ของคุณ)

โฟลเดอร์ที่มีอยู่ซึ่งคุณเพิ่งคัดลอกไฟล์ไปยังตอนนี้พร้อมที่จะโต้ตอบกับ git แล้ว

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