Jak sklonować repozytorium Git w określonym folderze?

2242

Wykonanie polecenia git clone [email protected]:whatevertworzy katalog w moim bieżącym folderze o nazwie whateveri upuszcza zawartość repozytorium Git do tego folderu:

/httpdocs/whatever/public

Mój problem polega na tym, że potrzebuję sklonować zawartość repozytorium Git do mojego bieżącego katalogu, aby pojawiały się we właściwej lokalizacji dla serwera WWW:

/httpdocs/public

Wiem, jak przenosić pliki po sklonowaniu repozytorium, ale wydaje się, że to psuje Git i chciałbym móc aktualizować tylko przez wywołanie git pull. W jaki sposób mogę to zrobić?

David Smith
źródło
3
W systemie Windows możesz przenosić pliki z folderu, w którym sklonujesz repozytorium [jeśli takie istnieje], aby było puste, gdy wykonujesz klonowanie . Po klonowaniu przenieś swoje pliki z powrotem [ctrl-z] i whoala ! Jeśli bieżący folder jest pusty, użyj: git clone giturl .
43
voila to pisownia
Matthias
80
@MatthiasDailey voilà to prawdziwa pisownia
silkfire
6
et voila po francusku et
voila

Odpowiedzi:

3218

Opcja A:

git clone [email protected]:whatever folder-name

Ergo, do right hereużytku:

git clone [email protected]:whatever .

Opcja B:

Przenieś także .gitfolder. Pamiętaj, że .gitfolder jest ukryty w większości graficznych eksploratorów plików, więc pamiętaj, aby pokazać ukryte pliki.

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

Pierwsza linia przechwytuje wszystkie normalne pliki, druga linia przechwytuje pliki kropkowe. Można to również zrobić w jednej linii, włączając dotglob (tj. shopt -s dotglob), Ale jest to prawdopodobnie złe rozwiązanie, jeśli zadajesz pytanie, na które odpowiada ta odpowiedź.

Jeszcze lepiej:

Zachowaj kopię roboczą gdzie indziej i utwórz symboliczne łącze. Lubię to:

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

W twoim przypadku byłoby to coś takiego:

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

Które można łatwo zmienić, jeśli chcesz, np .:

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

bez przenoszenia plików. Dodano -fnw przypadku, gdy ktoś kopiuje te linie ( -fjest siłą, -nunikaj często niechcianych interakcji z już istniejącymi i nieistniejącymi linkami).

Jeśli chcesz, aby to działało, skorzystaj z Opcji A, jeśli ktoś inny sprawdzi, co zrobiłeś, użyj Opcji C.

Czy Berk Güder
źródło
8
Nie myślałem o twojej opcji „Jeszcze lepiej” i podoba mi się to, chociaż nie jestem pewien, dlaczego. Jakie są tego zalety?
David Smith
6
Prawdopodobnie nie zapewnia obecnie żadnych korzyści, ale może zaoszczędzić wiele kłopotów, jeśli zdecydujesz się przenieść jakieś rzeczy.
Can Berk Güder
12
Ponadto możesz szybko przełączać się między wersjami dzięki opcji „Jeszcze lepiej”. Jest to szczególnie przydatne i wykorzystywane w przypadku serwerów.
Halil Özgür
4
@MEM Myślę, że ma na myśli stworzenie symbolicznego linku do .git, tj.ln -s path/to/.git path/to/working/directory
Alexander
27
Czy ktoś może wyjaśnić zalety tego? Jestem dziś trochę gęsty. W jaki sposób korzystanie z serwerów dowiązań symbolicznych przynosi korzyści?
trzykrotnie
586

Myślę, że przykładem jest wiele osób zadających to pytanie. Jeśli znajdujesz się w katalogu, do którego chcesz zrzucić zawartość repozytorium git, uruchom:

git clone [email protected]:whatever .

„.” na końcu określa bieżący folder jako folder kasy.

J Wynia
źródło
28
prawda, więc nie chcesz uruchamiać „git init” w tym folderze przed klonowaniem do niego. Ale jeśli tak, usunięcie folderu .git przed klonowaniem załatwi sprawę.
Magne
3
naprawione dla pustych katalogów w mojej odpowiedzi
csomakk
1
nie mogłem tego uruchomić w nitrous.io? nawet po opróżnieniu mówi, że katalog nie jest pusty
Tejas Manohar
@TejasManohar Upewnij się, że usunięte zostały również ukryte pliki.
Britic
ls -apokaże wszystkie pliki, w tym ukryte.
Michael Dorst
215

Przejdź do folderu. Jeśli folder jest pusty, to:

git clone [email protected]:whatever .

jeszcze

git init
git remote add origin PATH/TO/REPO
git fetch
git checkout -t origin/master
csomakk
źródło
9
W rzeczywistości była to dla mnie najbardziej użyteczna odpowiedź, kiedy potrzebowałem tylko przenieść już utworzony projekt do nowo utworzonego repozytorium. Sława!
wirher
13
Tylko odpowiedź, która określa sposób wyewidencjonowania w niepustym folderze, dziękuję.
Preston Badeer
2
Jest to bardzo pomocne, ponieważ włączenie switch -tnie jest wyraźnie pokazane w dokumentacji kasy git .
Chetabahana,
4
co robi przełącznik -t? Otrzymuję wiadomość o przerwaniu z listą nieśledzonych plików, które zostaną zastąpione przez kasę? Co robić w tej sytuacji? Nie chcę, aby te pliki zostały zastąpione?
Momin Zahid
2
-t dokumentacja z git: -t, --track Tworząc nową gałąź, skonfiguruj konfigurację „upstream”. Aby uzyskać szczegółowe informacje, zobacz „--track” w git-branch (1).
csomakk
87

Podstawowe klonowanie repozytorium Git

Klonujesz repozytorium za pomocą

git clone [url]

Na przykład, jeśli chcesz sklonować bibliotekę Open Framework Git Stanup University Drupal o nazwie open_framework, możesz to zrobić w następujący sposób:

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

Tworzy katalog o nazwie open_framework (w bieżącej lokalizacji lokalnego systemu plików), inicjuje w nim katalog .git, ściąga wszystkie dane dla tego repozytorium i sprawdza kopię roboczą najnowszej wersji. Jeśli przejdziesz do nowo utworzonego katalogu open_framework, zobaczysz w nim pliki projektu, gotowe do pracy lub użycia.

Klonowanie repozytorium w określonym folderze lokalnym

Jeśli chcesz sklonować repozytorium do katalogu o nazwie innej niż open_framework, możesz to określić jako następną opcję wiersza polecenia:

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

To polecenie robi to samo co poprzednie, ale katalog docelowy nazywa się mynewtheme.

Git ma wiele różnych protokołów przesyłania, których możesz użyć. Poprzedni przykład używa protokołu git: //, ale możesz także zobaczyć http (s): // lub użytkownik @ serwer: /path.git, który używa protokołu przesyłania SSH.

Craig Gjerdingen
źródło
spowoduje to automatyczne utworzenie folderu w bieżącym folderze i umieszczenie tam plików. Dzięki temu nie musisz się martwić o zastąpienie innego folderu.
arn-arn
23

Aby sklonować repozytorium git do określonego folderu, możesz użyć -C <path>parametru, np

git -C /httpdocs clone [email protected]:whatever

Chociaż nadal utworzy na nim whateverfolder, więc aby sklonować zawartość repozytorium w bieżącym katalogu, użyj następującej składni:

cd /httpdocs
git clone [email protected]:whatever .

Pamiętaj, że klonowanie do istniejącego katalogu jest dozwolone tylko wtedy, gdy katalog jest pusty .

Ponieważ klonujesz w folderze, który jest dostępny publicznie, rozważ oddzielenie repozytorium Git od drzewa roboczego, używając --separate-git-dir=<git dir>lub wykluczając .gitfolder w konfiguracji serwera WWW (np. W .htaccesspliku).

kenorb
źródło
17

Aby sklonować do Present Directory Directory :

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

Aby sklonować do innego katalogu :

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

Mam nadzieję, że to pomoże :)

Sarat Chandra
źródło
to też działało dla mnie. nie ./na początku ścieżki do folderu
Alon Gouldman
13

Kiedy przenosisz pliki tam, gdzie chcesz, przenosisz także .gitkatalog? W zależności od systemu operacyjnego i konfiguracji ten katalog może być ukryty.

Zawiera repozytorium i pliki pomocnicze, podczas gdy pliki projektu, które znajdują się w twoim /publickatalogu, są tylko wersjami aktualnie zatwierdzonego pobrania (domyślnie gałąź master).

Paweł
źródło
13

Jeśli chcesz sklonować w bieżącym folderze, spróbuj tego:

git clone https://github.com/example/example.git ./
Luis
źródło
8
fatal: ścieżka docelowa „.” już istnieje i nie jest pustym katalogiem.
Cleiton,
11

Stosowanie

git clone <repository>

Sklonuj repozytorium znajdujące się w <repository> na komputerze lokalnym. Oryginalne repozytorium może znajdować się w lokalnym systemie plików lub na zdalnym komputerze dostępnym przez HTTP lub SSH.

git clone <repo> <directory>

Sklonuj repozytorium znajdujące się w <repository> w folderze o nazwie <directory> na komputerze lokalnym.

Źródło: konfigurowanie repozytorium

Nagarjun
źródło
9

Pamiętaj, aby usunąć repozytorium .git, jeśli próbujesz sprawdzić zawartość bieżącego katalogu.

rm -rf .git następnie git clone https://github.com/symfony/symfony-sandbox.git

alex
źródło
3

Oto jak bym to zrobił, ale stworzyłem alias, aby to dla mnie zrobić.

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

Prawdopodobnie jest to bardziej elegancki sposób, ale uważam, że jest to dla mnie najłatwiejsze.

Oto alias, który utworzyłem, aby przyspieszyć. Zrobiłem to dla zsh, ale powinno działać dobrze dla bash lub jakiejkolwiek innej powłoki, takiej jak fish, xyzsh, fizsh i tak dalej.

Edit ~/.zshrc, /.bashrcitp ze swoim ulubionym edytorze (kopalnia jest leafpad, więc piszę $ leafpad ~/.zshrc).

Osobiście wolę jednak tworzyć wtyczki zsh, aby śledzić wszystkie moje aliasy. Możesz utworzyć osobistą wtyczkę dla oh-my-zsh, uruchamiając następujące polecenia:

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

Następnie dodaj te wiersze do nowo utworzonego pustego pliku alises.plugin:

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

(Odtąd zamień swoje nazwisko na moje.)

Następnie, aby uruchomić aliasy, muszą one (wraz z zsh) zostać pozyskane (lub jakkolwiek to się nazywa). Aby to zrobić, w niestandardowym dokumencie wtyczki dodaj to:

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

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

Zapisz wtyczkę oh-my-zsh i uruchom allsource. Jeśli to nie działa, po prostu uruchom source $ZSH/oh-my-zsh.sh; source /home/ev/.oh-my-zsh/plugins/ev-aliases/ev-aliases.plugin.zsh. Spowoduje to załadowanie źródła wtyczki, z którego będziesz mógł korzystać allsourceod teraz.


Jestem w trakcie tworzenia repozytorium Git ze wszystkimi moimi aliasami. Sprawdź je tutaj: pliki kropek Ev . Zachęcamy do rozwidlenia i ulepszenia ich w zależności od potrzeb.

Ev-
źródło
2

Jeśli używasz sshdo git cloningmożna użyć następującego polecenia.

git -C path clone [email protected]:path_to_repo.git

np .: git -C /home/ubuntu/ clone [email protected]:kennethreitz/requests.gitściągnąłby repozytorium git na requeststwoją /home/ubuntu/ścieżkę.

Ankit Singh
źródło
2

Z jakiegoś powodu ta składnia nie wyróżnia się:

git clone repo-url [folder]

Tutaj folder jest opcjonalną ścieżką do folderu lokalnego (który będzie lokalnym repozytorium).

Git clonebędzie również pullkodować ze zdalnego repozytorium do lokalnego repozytorium. W rzeczywistości jest to prawda:

git clone repo-url  =  git init + git remote add origin repo-url + git pull
prosti
źródło
0

Chociaż wszystkie powyższe odpowiedzi są dobre, chciałbym zaproponować nową metodę zamiast używania metody dowiązania symbolicznego w publicznym katalogu html, jak zaproponowano NAJLEPSZE w zaakceptowanej odpowiedzi. Musisz mieć dostęp do konfiguracji hosta wirtualnego serwera.

Chodzi o skonfigurowanie wirtualnego hosta serwera WWW bezpośrednio wskazującego katalog repozytorium. W Apache możesz to zrobić w następujący sposób:

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

Oto przykład wirtualnego pliku hosta:

<VirtualHost *:443>
    ServerName example.com

    DocumentRoot /path/to/your-git-repo
    ...
    ...
    ...
    ...
</VirtualHost>
Tarik
źródło
0

Możesz użyć następującego polecenia git, aby sklonować niestandardową nazwę katalogu

git clone <git_repo_url> <your_custom_directory_name>

Uwaga: Nie musisz tworzyć katalogu klienta, ponieważ zostanie on utworzony automatycznie

Manoj Rana
źródł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 .
Tarit Ray
źródło
-5

Odnośnie tej linii z oryginalnego postu:

„Wiem, jak przenieść pliki po sklonowaniu repozytorium, ale wydaje się, że to psuje git”

Jestem w stanie to zrobić i do tej pory nie widzę żadnych problemów z operacjami dodawania, zatwierdzania, wypychania i wyciągania.

Podejście to podano powyżej, ale nie zostało ono podzielone na etapy. Oto kroki, które działają dla mnie:

  1. klonuj repozytorium do dowolnego świeżego folderu tymczasowego
  2. cd do tego folderu głównego, który właśnie sklonowałeś lokalnie
  3. skopiuj całą zawartość folderu, w tym katalog /.git - do dowolnego istniejącego folderu, który ci się podoba; (powiedz projekt zaćmienia, który chcesz połączyć z repozytorium)

Istniejący folder, do którego właśnie skopiowałeś pliki, jest teraz gotowy do interakcji z git.

Gene Bo
źródło