learning:git
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
learning:git [26.01.2025 09:02] – [rebase вместо merge] viacheslav | learning:git [02.02.2025 07:32] (текущий) – [Получение изменений из общего репозитория] viacheslav | ||
---|---|---|---|
Строка 613: | Строка 613: | ||
Теперь ветки style и main идентичны. | Теперь ветки style и main идентичны. | ||
+ | ===== Несколько репозиториев ===== | ||
+ | Клонировать локальный репозиторий | ||
+ | <code bash> | ||
+ | cd C: | ||
+ | git clone work home | ||
+ | Cloning into ' | ||
+ | done. | ||
+ | |||
+ | ls | ||
+ | Каталог: | ||
+ | Mode | ||
+ | ---- | ||
+ | d----- | ||
+ | d----- | ||
+ | |||
+ | # Если посмотреть историю, | ||
+ | # origin/ | ||
+ | git log --all | ||
+ | 53c3dbd 2025-01-22 | Renamed hello.html; moved style.css (HEAD -> main, origin/ | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | ==== origin - указание первичного репозитория ==== | ||
+ | При клонировании репозитория исходный сохраняется как origin. Традиционно origin используется в качестве имени первичного централизованного репозитория. | ||
+ | <code bash> | ||
+ | git remote | ||
+ | origin | ||
+ | |||
+ | git remote show origin | ||
+ | * remote origin | ||
+ | Fetch URL: C:/ | ||
+ | Push URL: C:/ | ||
+ | HEAD branch: main | ||
+ | Remote branches: | ||
+ | main tracked | ||
+ | style tracked | ||
+ | Local branch configured for 'git pull': | ||
+ | main merges with remote main | ||
+ | Local ref configured for 'git push': | ||
+ | main pushes to main (up to date) | ||
+ | </ | ||
+ | |||
+ | ==== Локальные и удалённые ветки ==== | ||
+ | Если вывести список веток в клонированном репозитории, | ||
+ | <code bash> | ||
+ | git branch | ||
+ | * main | ||
+ | |||
+ | # С параметром -a будут видны все ветки | ||
+ | git branch -a | ||
+ | * main | ||
+ | remotes/ | ||
+ | remotes/ | ||
+ | remotes/ | ||
+ | </ | ||
+ | Ветки в удаленном репозитории не рассматриваются как локальные. Если нужна ветка style, то нужно её создать. | ||
+ | |||
+ | ==== Синхронизация изменений из удалённого репозитория ==== | ||
+ | '' | ||
+ | <code bash> | ||
+ | # Внесение изменений в удалённый репозиторий | ||
+ | cd ../work | ||
+ | git add .\README | ||
+ | git commit -m " | ||
+ | [main 7cc9cfb] Changed README in original repo | ||
+ | 1 file changed, 2 insertions(+), | ||
+ | |||
+ | # Получение изменений в локальном | ||
+ | cd ../home | ||
+ | git fetch | ||
+ | remote: Enumerating objects: 5, done. | ||
+ | remote: Counting objects: 100% (5/5), done. | ||
+ | remote: Compressing objects: 100% (3/3), done. | ||
+ | remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0) | ||
+ | Unpacking objects: 100% (3/3), 372 bytes | 28.00 KiB/s, done. | ||
+ | From C:/ | ||
+ | | ||
+ | |||
+ | # Коммит приехал, | ||
+ | # Соответственно, | ||
+ | git log --all | ||
+ | 7cc9cfb 2025-02-01 | Changed README in original repo (origin/ | ||
+ | 53c3dbd 2025-01-22 | Renamed hello.html; moved style.css (HEAD -> main, origin/ | ||
+ | 31f51f7 2025-01-22 | Include css into hello.html [Your Name] | ||
+ | d835c42 2025-01-22 | Add css [Your Name] | ||
+ | 9e1309b 2025-01-22 | Added meta title [Your Name] | ||
+ | b022e6a 2025-01-22 | Add README [Your Name] | ||
+ | b0d54f0 2025-01-22 | Add copyright with email [Your Name] | ||
+ | 204912e 2025-01-21 | Added HTML header (tag: v1) [Your Name] | ||
+ | 88622c4 2025-01-21 | Added H1 tag (tag: v1-beta) [Your Name] | ||
+ | 1a3a27e 2025-01-21 | Initial Commit [unknown] | ||
+ | </ | ||
+ | |||
+ | ==== Слияние полученных изменений удалённого репозитория с локальным ==== | ||
+ | '' | ||
+ | <code bash> | ||
+ | git merge origin/main | ||
+ | Updating 53c3dbd..7cc9cfb | ||
+ | Fast-forward | ||
+ | | ||
+ | 1 file changed, 2 insertions(+), | ||
+ | </ | ||
+ | Теперь файл README изменён и локально. | ||
+ | |||
+ | Есть возможность сразу и получить изменения из удалённого репозитория, | ||
+ | Т. е., '' | ||
+ | |||
+ | ==== Добавление локальной ветки, отслеживающей удалённую ==== | ||
+ | <code bash> | ||
+ | # Добавить ветку style, отслеживающую origin/ | ||
+ | git branch --track style origin/ | ||
+ | branch ' | ||
+ | |||
+ | # Локальная ветка style появилась в списке веток | ||
+ | git branch -a | ||
+ | * main | ||
+ | style | ||
+ | remotes/ | ||
+ | remotes/ | ||
+ | remotes/ | ||
+ | |||
+ | # и в логе | ||
+ | git log --max-count=2 | ||
+ | 7cc9cfb 2025-02-01 | Changed README in original repo (HEAD -> main, origin/ | ||
+ | 53c3dbd 2025-01-22 | Renamed hello.html; moved style.css (origin/ | ||
+ | </ | ||
+ | |||
+ | ===== Чистый репозиторий ===== | ||
+ | Чистый (голый, | ||
+ | <code bash> | ||
+ | cd .. | ||
+ | # Традиционно " | ||
+ | git clone --bare work work.git | ||
+ | Cloning into bare repository ' | ||
+ | done. | ||
+ | PS C: | ||
+ | |||
+ | Каталог: | ||
+ | |||
+ | Mode | ||
+ | ---- | ||
+ | d----- | ||
+ | d----- | ||
+ | d----- | ||
+ | d----- | ||
+ | -a---- | ||
+ | -a---- | ||
+ | -a---- | ||
+ | -a---- | ||
+ | </ | ||
+ | |||
+ | ==== Добавление чистого репозитория как удалённого, | ||
+ | <code bash> | ||
+ | cd work | ||
+ | # Добавить чистый репозиторий work.git как shared | ||
+ | git remote add shared ../work.git | ||
+ | |||
+ | # Чистые репозитории обычно располагаются на удаленном сервере и туда нельзя зайти, чтобы подтянуть изменения. | ||
+ | # Поэтому необходимо как-нибудь передать наши изменения в репозиторий. | ||
+ | |||
+ | # Внести изменения, | ||
+ | git add README | ||
+ | git commit -m "Added shared comment to readme" | ||
+ | [main 576bd94] Added shared comment to readme | ||
+ | 1 file changed, 1 insertion(+), | ||
+ | |||
+ | # Передать изменения в чистый репозиторий | ||
+ | git push shared main | ||
+ | Enumerating objects: 5, done. | ||
+ | Counting objects: 100% (5/5), done. | ||
+ | Delta compression using up to 8 threads | ||
+ | Compressing objects: 100% (3/3), done. | ||
+ | Writing objects: 100% (3/3), 399 bytes | 66.00 KiB/s, done. | ||
+ | Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0) | ||
+ | To ..\work.git | ||
+ | | ||
+ | </ | ||
+ | |||
+ | ==== Получение изменений из общего репозитория ==== | ||
+ | <code bash> | ||
+ | # Перейти в репозиторий назначения | ||
+ | cd ../home | ||
+ | # Добавить чистый репозиторий work.git как shared (так же, как ранее в исходном репозитории work) | ||
+ | git remote add shared ../work.git | ||
+ | # Отслеживать ветку main в shared | ||
+ | git branch --track shared main | ||
+ | branch ' | ||
+ | # Получить изменения из shared/main | ||
+ | git pull shared main | ||
+ | remote: Enumerating objects: 5, done. | ||
+ | remote: Counting objects: 100% (5/5), done. | ||
+ | remote: Compressing objects: 100% (3/3), done. | ||
+ | remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0) | ||
+ | Unpacking objects: 100% (3/3), 379 bytes | 27.00 KiB/s, done. | ||
+ | From ../work | ||
+ | * branch | ||
+ | * [new branch] | ||
+ | Updating 7cc9cfb..576bd94 | ||
+ | Fast-forward | ||
+ | | ||
+ | 1 file changed, 1 insertion(+), | ||
+ | </ | ||
+ | Теперь файл README изменился и в home. | ||
+ | |||
+ | ===== Git-сервер ===== | ||
+ | Git умеет быть и сервером. | ||
+ | <code bash> | ||
+ | cd .. | ||
+ | ls | ||
+ | |||
+ | Каталог: | ||
+ | |||
+ | Mode | ||
+ | ---- | ||
+ | d----- | ||
+ | d----- | ||
+ | d----- | ||
+ | |||
+ | |||
+ | # Запуск демона git (добавить --enable=receive-pack, | ||
+ | # сервер не производит аутентификацию, | ||
+ | git daemon --verbose --export-all --base-path=. | ||
+ | [20528] Ready to rumble | ||
+ | # Это появляется позже после подключения клиента | ||
+ | [21436] Connection from [::1]:34050 | ||
+ | [21436] unable to set SO_KEEPALIVE on socket: Input/ | ||
+ | [21436] Extended attribute " | ||
+ | [21436] Extended attribute " | ||
+ | [21436] Request upload-pack for '/ | ||
+ | </ | ||
+ | |||
+ | В другом окне терминала (прошлое занято выполняющимся сервисом): | ||
+ | <code bash> | ||
+ | cd C: | ||
+ | # Клонировать work.git с сервера в локальный net_work | ||
+ | git clone git:// | ||
+ | Cloning into ' | ||
+ | remote: Enumerating objects: 33, done. | ||
+ | remote: Counting objects: 100% (33/33), done. | ||
+ | remote: Compressing objects: 100% (25/25), done. | ||
+ | remote: Total 33 (delta 4), reused 0 (delta 0), pack-reused 0 (from 0) | ||
+ | Receiving objects: 100% (33/33), done. | ||
+ | Resolving deltas: 100% (4/4), done. | ||
+ | |||
+ | # Файлы появились | ||
+ | ls net_work | ||
+ | |||
+ | Каталог: | ||
+ | |||
+ | Mode | ||
+ | ---- | ||
+ | d----- | ||
+ | -a---- | ||
+ | -a---- | ||
+ | </ | ||
learning/git.1737882178.txt.gz · Последнее изменение: 26.01.2025 09:02 — viacheslav