Làm thế nào để bạn sao chép một kho lưu trữ Git vào một thư mục cụ thể?


2244

Thực thi lệnh git clone git@github.com:whateversẽ tạo một thư mục trong thư mục hiện tại của tôi có tên whatevervà thả nội dung của kho Git vào thư mục đó:

/httpdocs/whatever/public

Vấn đề của tôi là tôi cần nội dung của kho Git được sao chép vào thư mục hiện tại của mình để chúng xuất hiện ở vị trí thích hợp cho máy chủ web:

/httpdocs/public

Tôi biết cách di chuyển các tệp sau khi tôi đã sao chép kho lưu trữ, nhưng điều này dường như phá vỡ Git và tôi muốn có thể cập nhật chỉ bằng cách gọi git pull. Tôi có thể làm cái này như thế nào?


3
Trên Windows, bạn có thể di chuyển các tệp từ thư mục nơi bạn sẽ sao chép repo [nếu có] để nó trống khi bạn thực hiện git clone . Sau khi nhân bản, di chuyển các tệp của bạn trở lại [ctrl-z] và whoala ! Nếu thư mục hiện tại trống, chỉ cần sử dụng: git clone giturl .

44
voila là cách đánh vần
Matthias

81
@MatthiasDailey voilà là cách đánh vần thực tế
lụa lửa

6
et voilà là tiếng Pháp của et voilà
Fattie

Câu trả lời:


3221

Tùy chọn A:

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

Ergo, để right heresử dụng:

git clone git@github.com:whatever .

Tùy chọn B:

Di chuyển .gitthư mục, quá. Lưu ý rằng .gitthư mục bị ẩn trong hầu hết các trình khám phá tệp đồ họa, vì vậy hãy chắc chắn hiển thị các tệp ẩn.

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

Dòng đầu tiên lấy tất cả các tệp bình thường, dòng thứ hai lấy các tệp chấm. Nó cũng có khả năng thực hiện nó trong một dòng bằng cách kích hoạt dotglob (nghĩa là shopt -s dotglob) nhưng đó có lẽ là một giải pháp tồi nếu bạn đang đặt câu hỏi cho câu trả lời này.

Tốt hơn nữa:

Giữ bản sao làm việc của bạn ở một nơi khác và tạo một liên kết tượng trưng. Như thế này:

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

Đối với bạn trường hợp này sẽ là một cái gì đó như:

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

Mà dễ dàng có thể được thay đổi để kiểm tra nếu bạn muốn nó, tức là:

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

mà không di chuyển các tập tin xung quanh. Đã thêm -fntrong trường hợp ai đó đang sao chép các dòng này ( -flà bắt buộc, -ntránh một số tương tác thường không mong muốn với các liên kết đã có và không tồn tại).

Nếu bạn chỉ muốn nó hoạt động, hãy sử dụng Tùy chọn A, nếu người khác sẽ xem xét những gì bạn đã làm, hãy sử dụng Tùy chọn C.


8
Tôi đã không nghĩ đến tùy chọn 'Tốt hơn nữa' của bạn và tôi thích nó mặc dù tôi không chắc tại sao. Những lợi thế của điều này là gì?
David Smith

6
Nó có thể không cung cấp bất kỳ lợi thế nào ngay bây giờ, nhưng nó có thể giúp bạn tiết kiệm rất nhiều rắc rối nếu bạn quyết định di chuyển mọi thứ xung quanh một ngày nào đó.
Có thể Berk Güder 17/03/2016

12
Ngoài ra, bạn có thể chuyển đổi nhanh chóng giữa các bản phát hành với tùy chọn "Tốt hơn nữa". Điều này đặc biệt hữu ích và được sử dụng cho các máy chủ.
Halil Özgür

4
@MEM Tôi nghĩ rằng anh ta có nghĩa là tạo một liên kết tượng trưng đến .git tức làln -s path/to/.git path/to/working/directory
Alexander

27
Bất cứ ai có thể giải thích những lợi ích của điều này ?? Hôm nay tôi hơi dày đặc. Làm thế nào để sử dụng một máy chủ symlink có lợi?
gấp ba

586

Ví dụ tôi nghĩ rằng rất nhiều người hỏi câu hỏi này là sau này. Nếu bạn đang ở trong thư mục bạn muốn nội dung của kho git được đổ vào, hãy chạy:

git clone git@github.com:whatever .

Các "." ở cuối chỉ định thư mục hiện tại là thư mục thanh toán.


28
đúng, vì vậy bạn không muốn chạy "git init" trong thư mục này trước khi sao chép vào nó. Nhưng nếu bạn đã làm, sau đó loại bỏ thư mục .git trước khi nhân bản sẽ thực hiện thủ thuật.
Magne

3
đã sửa cho các thư mục trống trong câu trả lời của tôi
csomakk

1
không thể làm việc này trong nitpy.io? ngay cả sau khi làm trống, nó nói rằng thư mục không trống
Tejas Manohar

@TejasManohar Đảm bảo rằng bạn cũng đã xóa các tệp ẩn.
Britic

ls -asẽ hiển thị tất cả các tập tin, bao gồm cả những tập tin ẩn.
Michael Dorst

215

Đi vào thư mục .. Nếu thư mục trống, thì:

git clone git@github.com:whatever .

khác

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

9
Trên thực tế đây là câu trả lời hữu ích nhất cho tôi khi tôi chỉ cần đẩy dự án đã tạo sang kho lưu trữ mới được tạo. Thanh danh!
wirher

13
Chỉ trả lời chỉ định cách kiểm tra vào một thư mục không trống, cảm ơn bạn.
Preston Badeer

2
Điều này thực sự hữu ích vì switch -tkhông hiển thị rõ ràng trên tài liệu kiểm tra git .
Chetabahana

4
Công tắc -t làm gì? Tôi đang nhận được một tin nhắn hủy bỏ với một danh sách các tập tin chưa được theo dõi sẽ bị ghi đè bởi thanh toán? Làm gì trong tình huống này? Tôi không muốn những tập tin đó bị ghi đè?
Momin Zahid

2
Tài liệu -t từ git: -t, --track Khi tạo một nhánh mới, hãy thiết lập cấu hình "ngược dòng". Xem "--track" trong chi nhánh git (1) để biết chi tiết.
csomakk

87

Nhân bản kho lưu trữ Git cơ bản

Bạn sao chép một kho lưu trữ với

git clone [url]

Ví dụ: nếu bạn muốn sao chép thư viện Git Open Framework Git của Đại học Stanford có tên là open_framework, bạn có thể làm như vậy:

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

Điều đó tạo ra một thư mục có tên open_framework (tại vị trí hệ thống tệp cục bộ hiện tại của bạn), khởi tạo thư mục .git bên trong nó, kéo xuống tất cả dữ liệu cho kho lưu trữ đó và kiểm tra bản sao làm việc của phiên bản mới nhất. Nếu bạn đi vào thư mục open_framework mới được tạo, bạn sẽ thấy các tệp dự án trong đó, sẵn sàng để được làm việc hoặc sử dụng.

Nhân bản một kho lưu trữ vào một thư mục cục bộ cụ thể

Nếu bạn muốn sao chép kho lưu trữ vào một thư mục có tên khác với open_framework, bạn có thể chỉ định đó là tùy chọn dòng lệnh tiếp theo:

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

Lệnh đó thực hiện tương tự như lệnh trước, nhưng thư mục đích được gọi là mynewtheme.

Git có một số giao thức chuyển khác nhau mà bạn có thể sử dụng. Ví dụ trước sử dụng giao thức git: //, nhưng bạn cũng có thể thấy http (s): // hoặc user @ server: /path.git, sử dụng giao thức truyền SSH.


điều này sẽ tự động tạo một thư mục trong thư mục hiện tại của bạn và đặt các tệp ở đó. Vì vậy, bạn không cần phải lo lắng về việc ghi đè bất kỳ thư mục nào khác.
arn-arn

24

Để sao chép kho git vào một thư mục cụ thể, bạn có thể sử dụng -C <path>tham số, vd

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

Mặc dù nó vẫn sẽ tạo một whateverthư mục trên đầu trang, vì vậy để sao chép nội dung của kho lưu trữ vào thư mục hiện tại, hãy sử dụng cú pháp sau:

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

Lưu ý rằng nhân bản vào một thư mục hiện có chỉ được phép khi thư mục trống .

Vì bạn đang nhân bản vào thư mục có thể truy cập công khai, hãy xem xét tách kho lưu trữ Git của bạn khỏi cây làm việc bằng cách sử dụng --separate-git-dir=<git dir>hoặc loại trừ .gitthư mục trong cấu hình máy chủ web của bạn (ví dụ: trong .htaccesstệp).


17

Để sao chép vào Thư mục làm việc hiện tại :

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

Để sao chép vào Thư mục khác :

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

Hy vọng nó giúp :)


điều này cũng làm việc cho tôi không phải ./ở đầu đường dẫn đến thư mục
Alon Gouldman

13

Khi bạn di chuyển các tập tin đến nơi bạn muốn, bạn cũng đang di chuyển .gitthư mục? Tùy thuộc vào hệ điều hành và cấu hình của bạn, thư mục này có thể bị ẩn.

Nó chứa repo và các tệp hỗ trợ, trong khi các tệp dự án trong /publicthư mục của bạn chỉ là các phiên bản trong cam kết thanh toán hiện tại (nhánh chính theo mặc định).


13

Bản sao:

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

Nhân bản "chi nhánh cụ thể":

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

13

Nếu bạn muốn sao chép vào thư mục hiện tại, bạn nên thử điều này:

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

8
gây tử vong: đường dẫn đích '.' đã tồn tại và không phải là một thư mục trống.
Cleiton

11

Sử dụng

git clone <repository>

Sao chép kho lưu trữ được đặt tại <repository> vào máy cục bộ. Kho lưu trữ ban đầu có thể được đặt trên hệ thống tệp cục bộ hoặc trên một máy từ xa có thể truy cập thông qua HTTP hoặc SSH.

git clone <repo> <directory>

Sao chép kho lưu trữ nằm ở <repository> vào thư mục có tên <thư mục> trên máy cục bộ.

Nguồn: Thiết lập kho lưu trữ


9

Hãy chắc chắn rằng bạn xóa kho lưu trữ .git nếu bạn đang cố kiểm tra điều đó vào thư mục hiện tại.

rm -rf .git sau đó git clone https://github.com/symfony/symfony-sandbox.git


3

Đây là cách tôi sẽ làm điều đó, nhưng tôi đã tạo ra một bí danh để làm điều đó cho tôi.

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

Có lẽ có một cách thanh lịch hơn để làm điều này, tuy nhiên tôi thấy điều này là dễ nhất cho bản thân mình.

Đây là bí danh tôi tạo ra để tăng tốc mọi thứ. Tôi đã làm nó cho zsh, nhưng nó chỉ hoạt động tốt cho bash hoặc bất kỳ shell nào khác như cá, xyzsh, fizsh, v.v.

Chỉnh sửa ~/.zshrc, /.bashrcv.v. với trình soạn thảo yêu thích của bạn (của tôi là Leafpad, vì vậy tôi sẽ viết $ leafpad ~/.zshrc).

Tuy nhiên, sở thích cá nhân của tôi là tạo một plugin zsh để theo dõi tất cả các bí danh của tôi. Bạn có thể tạo một plugin cá nhân cho oh-my-zsh bằng cách chạy các lệnh sau:

$ 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'

Sau đó, thêm các dòng này vào tệp alises.plugin trống mới tạo của bạn:

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

(Từ đây, thay tên của bạn bằng tên của tôi.)

Sau đó, để làm cho các bí danh hoạt động, chúng (cùng với zsh) phải có nguồn gốc (hoặc bất cứ thứ gì nó được gọi). Để làm như vậy, bên trong tài liệu plugin tùy chỉnh của bạn thêm điều này:

## 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 "

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

Lưu plugin oh-my-zsh của bạn và chạy allsource. Nếu điều đó dường như không hoạt động, chỉ cần chạy source $ZSH/oh-my-zsh.sh; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh. Điều đó sẽ tải nguồn plugin cho phép bạn sử dụng allsourcetừ bây giờ.


Tôi đang trong quá trình tạo một kho lưu trữ Git với tất cả các bí danh của mình. Xin vui lòng kiểm tra chúng ở đây: tập tin dấu chấm của Ev . Xin vui lòng ngã ba và cải thiện chúng cho phù hợp với nhu cầu của bạn.


2

Nếu bạn đang sử dụng sshcho git cloningbạn có thể sử dụng lệnh sau.

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

ví dụ: git -C /home/ubuntu/ clone git@github.com:kennethreitz/requests.gitsẽ kéo kho git cho đường dẫn requestscủa bạn /home/ubuntu/.


2

Từ một số lý do, cú pháp này không nổi bật:

git clone repo-url [folder]

Ở đây thư mục là một đường dẫn tùy chọn đến thư mục cục bộ (sẽ là một kho lưu trữ cục bộ).

Git clonecũng sẽ pullmã từ kho lưu trữ từ xa vào kho lưu trữ cục bộ. Trong thực tế nó là sự thật:

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

0

Mặc dù tất cả các câu trả lời ở trên đều tốt, tôi muốn đề xuất một phương pháp mới thay vì sử dụng phương thức liên kết tượng trưng trong thư mục html công khai như đề xuất TỐT NHẤT trong câu trả lời được chấp nhận. Bạn cần có quyền truy cập vào cấu hình máy chủ ảo của máy chủ.

Đó là về cấu hình máy chủ ảo của máy chủ web của bạn trực tiếp trỏ đến thư mục kho lưu trữ. Trong Apache bạn có thể làm điều đó như:

DocumentRoot / var / www / html / website / your-git-repo

Dưới đây là một ví dụ về tệp máy chủ ảo:

<VirtualHost *:443>
    ServerName example.com

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

0

Bạn có thể sử dụng lệnh git sau để sao chép với tên thư mục tùy chỉnh

git clone <git_repo_url> <your_custom_directory_name>

Lưu ý: Bạn không cần tạo thư mục yêu cầu của mình vì nó sẽ tự động tạo


-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

Về dòng này từ bài viết gốc:

"Tôi biết cách di chuyển các tệp sau khi tôi đã sao chép repo, nhưng điều này dường như phá vỡ git"

Tôi có thể làm điều đó và tôi không thấy bất kỳ vấn đề nào cho đến nay với các thao tác thêm, cam kết, đẩy, kéo.

Cách tiếp cận này được nêu ở trên, nhưng không được chia thành các bước. Đây là các bước làm việc cho tôi:

  1. sao chép repo vào bất kỳ thư mục tạm thời mới
  2. cd vào thư mục gốc mà bạn vừa nhân bản cục bộ
  3. sao chép toàn bộ nội dung của thư mục, bao gồm thư mục /.git - vào bất kỳ thư mục hiện có nào bạn muốn; (nói một dự án nhật thực mà bạn muốn hợp nhất với repo của bạn)

Thư mục hiện có mà bạn vừa sao chép các tệp vào, hiện đã sẵn sàng để tương tác với git.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.