Як ви клонуєте сховище Git у певну папку?


2243

Виконання команди git clone git@github.com:whateverстворює каталог у моїй поточній папці з іменем whateverта видаляє вміст сховища Git у цю папку:

/httpdocs/whatever/public

Моя проблема полягає в тому, що мені потрібен вміст сховища Git, клонований у мою поточну директорію, щоб вони відображалися у потрібному місці для веб-сервера:

/httpdocs/public

Я знаю, як переміщувати файли після того, як я клонував сховище, але це, здається, порушує Git, і я хотів би мати можливість оновити лише зателефонувавши git pull. Як я можу це зробити?


3
У Windows ви можете переміщати файли з папки, куди ви будете клонувати репо [якщо є], щоб вона була порожньою, коли ви робите клон git . Після клонування перенесіть файли назад [ctrl-z] та whoala ! Якщо поточна папка порожня, просто використовуйте: git clone giturl .

43
вуаля - правопис
Маттіас

80
@MatthiasDailey voilà - це фактичний правопис
silkfire

6
et voilà - французька мова для et voilà
Fattie

Відповіді:


3219

Варіант A:

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

Ergo, для right hereвикористання:

git clone git@github.com:whatever .

Варіант B:

Перемістіть .gitпапку теж. Зауважте, що .gitпапка прихована в більшості дослідників графічних файлів, тому обов'язково показуйте приховані файли.

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

Перший рядок захоплює всі звичайні файли, другий рядок схоплює dot-файли. Це також можливо зробити це в один рядок, включивши 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уникайте часто небажаних взаємодій із уже наявними та неіснуючими посиланнями).

Якщо ви просто хочете, щоб він працював, скористайтеся Варіантом A, якщо хтось інший буде дивитися на те, що ви зробили, скористайтеся Варіантом C.


8
Я не думав про твій варіант «Ще краще», і мені це подобається, хоча я не знаю чому. У чому переваги цього?
Девід Сміт

6
Напевно, це не дає жодної переваги зараз, але це може врятувати вам багато клопоту, якщо ви вирішите перенести речі на якийсь день.
Може Берк Гюдер

12
Крім того, ви можете швидко перемикатися між випусками за допомогою параметра "Краще ще". Це особливо корисно і використовується для серверів.
Halil Özgür

4
@MEM Я думаю, що він означає створити символічне посилання на .git, тобтоln -s path/to/.git path/to/working/directory
Олександр

27
Хтось може пояснити переваги цього ?? Я сьогодні трохи щільний. Як користуються серверами вигод symlink?
потрійний

586

Приклад, на який я думаю, що багато людей, які задають це питання, - це ось такий. Якщо ви перебуваєте в каталозі, до якого потрібно скинути вміст сховища git, запустіть:

git clone git@github.com:whatever .

"". в кінці вказує поточну папку як папку оформлення замовлення.


28
вірно, тому ви не хочете запускати "git init" у цій папці, перш ніж клонувати її. Але якщо ви це зробили, то видалення папки .git перед клонуванням виконає трюк.
Магне

3
виправлено порожні каталоги у моїй відповіді
csomakk

1
не вдалося змусити це працювати в nitrous.io? навіть після випорожнення, він каже, що каталог не порожній
Tejas Manohar

@TejasManohar Переконайтесь, що ви також видалили приховані файли.
Британець

ls -aпокаже всі файли, включаючи приховані.
Майкл Дорст

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
Дякую лише за відповідь, яка визначає, як оформити замовлення в не порожню папку.
Престон Бадер

2
Це дуже корисно, оскільки в switch -tдокументації про оформлення git не чітко показано .
Четабахана

4
що робить перемикач -t? Я отримую повідомлення про перерву з переліком файлів, які не відстежуються, які будуть перезаписані замовленням? Що робити у цій ситуації? Я не хочу, щоб ці файли були перезаписані?
Момін Захід

2
-t документація від git: -t, --track Під час створення нової гілки встановіть конфігурацію "upstream". Для детальної інформації див. "- трек" у git-branch (1).
csomakk

87

Клонування основного сховища Git

Ви клонуєте сховище

git clone [url]

Наприклад, якщо ви хочете клонувати бібліотеку Drupal Open Framework Git Станфордського університету під назвою 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

23

Щоб клонувати сховище 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

Сподіваюся, що це допомагає :)


це працювало і для мене. не ./на початку шляху до папки
Алон

13

Коли ви переміщуєте файли туди, куди ви їх хочете, ви також переміщуєте .gitкаталог? Залежно від вашої ОС та конфігурації, цей каталог може бути прихованим.

Він містить файли репо та допоміжні файли, тоді як файли проектів, що знаходяться у вашому /publicкаталозі, - це лише версії в поточній комісії для виїзду (головна гілка за замовчуванням).


13

Клон:

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
фатально: шлях призначення '. " вже існує і не є порожнім каталогом.
Клейтон

11

Використання

git clone <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, але він повинен працювати чудово для bash або будь-якої іншої оболонки, наприклад, риба, xyzsh, fizsh тощо.

Edit ~/.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 / website / 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>

Примітка. Вам не потрібно створювати свій каталог зберігачів, оскільки він буде створений автоматично


-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

Щодо цього рядка з початкової публікації:

"Я знаю, як переміщувати файли після того, як я клонував репо, але це, здається, порушує git"

Я в змозі це зробити, і я не бачу жодних проблем до цих пір з операціями додавання, фіксації, натискання та витягування.

Такий підхід зазначено вище, але просто не розбивається на етапи. Ось такі кроки, які працюють для мене:

  1. клонуйте репо в будь-яку свіжу тимчасову папку
  2. CD в ​​ту кореневу папку, яку ви просто клонували локально
  3. скопіюйте весь вміст папки, включаючи каталог /.git - у будь-яку наявну вам папку; (скажіть проект затемнення, який потрібно об'єднати з репо)

Існуюча папка, в яку ви просто скопіювали файли, тепер готова взаємодіяти з git.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.