Инструменты пользователя

Инструменты сайта


learning:git

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
learning:git [26.01.2025 09:02] – [rebase вместо merge] viacheslavlearning:git [02.02.2025 07:32] (текущий) – [Получение изменений из общего репозитория] viacheslav
Строка 613: Строка 613:
 Теперь ветки style и main идентичны. Теперь ветки style и main идентичны.
  
 +===== Несколько репозиториев =====
 +Клонировать локальный репозиторий
 +<code bash>
 +cd C:\temp\githowto\repositories
 +git clone work home
 +Cloning into 'home'...
 +done.
 +
 +ls
 +    Каталог: C:\temp\githowto\repositories
 +Mode                 LastWriteTime         Length Name
 +----                 -------------         ------ ----
 +d-----        01.02.2025      9:11                home
 +d-----        26.01.2025     11:59                work
 +
 +# Если посмотреть историю, то у обоих репозиториев одинаковые коммиты, но у клонированного добавились ветки
 +# origin/style, origin/main, origin/HEAD
 +git log --all
 +53c3dbd 2025-01-22 | Renamed hello.html; moved style.css (HEAD -> main, origin/style, origin/main, origin/HEAD) [Your Name]
 +...
 +</code>
 +
 +==== origin - указание первичного репозитория ====
 +При клонировании репозитория исходный сохраняется как origin. Традиционно origin используется в качестве имени первичного централизованного репозитория.
 +<code bash>
 +git remote
 +origin
 +
 +git remote show origin
 +* remote origin
 +  Fetch URL: C:/temp/githowto/repositories/work
 +  Push  URL: C:/temp/githowto/repositories/work
 +  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>
 +
 +==== Локальные и удалённые ветки ====
 +Если вывести список веток в клонированном репозитории, то будет видна только main.
 +<code bash>
 +git branch
 +* main
 +
 +# С параметром -a будут видны все ветки
 +git branch -a
 +* main
 +  remotes/origin/HEAD -> origin/main
 +  remotes/origin/main
 +  remotes/origin/style
 +</code>
 +Ветки в удаленном репозитории не рассматриваются как локальные. Если нужна ветка style, то нужно её создать.
 +
 +==== Синхронизация изменений из удалённого репозитория ====
 +''git fetch'' - получение новых коммитов из удаленного репозитория без изменения локальных веток.
 +<code bash>
 +# Внесение изменений в удалённый репозиторий
 +cd ../work
 +git add .\README
 +git commit -m "Changed README in original repo"
 +[main 7cc9cfb] Changed README in original repo
 + 1 file changed, 2 insertions(+), 1 deletion(-)
 +
 +# Получение изменений в локальном
 +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:/temp/githowto/repositories/work
 +   53c3dbd..7cc9cfb  main       -> origin/main
 +
 +# Коммит приехал, но не интегрировался в локальную ветку main (HEAD не на последнем коммите)
 +# Соответственно, файл локальный файл README не изменился.
 +git log --all
 +7cc9cfb 2025-02-01 | Changed README in original repo (origin/main, origin/HEAD) [Your Name]
 +53c3dbd 2025-01-22 | Renamed hello.html; moved style.css (HEAD -> main, origin/style) [Your Name]
 +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>
 +
 +==== Слияние полученных изменений удалённого репозитория с локальным ====
 +''git merge'' сливает полученные ранее изменения в локальный репозиторий.
 +<code bash>
 +git merge origin/main
 +Updating 53c3dbd..7cc9cfb
 +Fast-forward
 + README | 3 ++-
 + 1 file changed, 2 insertions(+), 1 deletion(-)
 +</code>
 +Теперь файл README изменён и локально.
 +
 +Есть возможность сразу и получить изменения из удалённого репозитория, и сразу слить их в локальный - это ''git pull''.\\
 +Т. е., ''git pull'' = ''git fetch'' + ''git merge origin/main''.
 +
 +==== Добавление локальной ветки, отслеживающей удалённую ====
 +<code bash>
 +# Добавить ветку style, отслеживающую origin/style
 +git branch --track style origin/style
 +branch 'style' set up to track 'origin/style'.
 +
 +# Локальная ветка style появилась в списке веток
 +git branch -a
 +* main
 +  style
 +  remotes/origin/HEAD -> origin/main
 +  remotes/origin/main
 +  remotes/origin/style
 +
 +# и в логе
 +git log --max-count=2
 +7cc9cfb 2025-02-01 | Changed README in original repo (HEAD -> main, origin/main, origin/HEAD) [Your Name]
 +53c3dbd 2025-01-22 | Renamed hello.html; moved style.css (origin/style, style) [Your Name]
 +</code>
 +
 +===== Чистый репозиторий =====
 +Чистый (голый, bare) репозиторий не имеет рабочего каталога. Он содержит только директорию .git, в которой Git хранит все свои внутренние данные. Обычно используется в качестве удалённого репозитория. Так как bare репозиторий используется только для обмена, то нет причин создавать рабочую копию на диске, проще говоря, такой репозиторий содержит только каталог .git вашего проекта и ничего больше.
 +<code bash>
 +cd ..
 +# Традиционно "чистый" репозиторий создаётся с .git в конце имени
 +git clone --bare work work.git
 +Cloning into bare repository 'work.git'...
 +done.
 +PS C:\temp\githowto\repositories> ls work.git
 +
 +    Каталог: C:\temp\githowto\repositories\work.git
 +
 +Mode                 LastWriteTime         Length Name
 +----                 -------------         ------ ----
 +d-----        02.02.2025      9:39                hooks
 +d-----        02.02.2025      9:39                info
 +d-----        02.02.2025      9:39                objects
 +d-----        02.02.2025      9:39                refs
 +-a----        02.02.2025      9:39            164 config
 +-a----        02.02.2025      9:39             73 description
 +-a----        02.02.2025      9:39             21 HEAD
 +-a----        02.02.2025      9:39            274 packed-refs
 +</code>
 +
 +==== Добавление чистого репозитория как удалённого, отправка изменений ====
 +<code bash>
 +cd work
 +# Добавить чистый репозиторий work.git как shared
 +git remote add shared ../work.git
 +
 +# Чистые репозитории обычно располагаются на удаленном сервере и туда нельзя зайти, чтобы подтянуть изменения.
 +# Поэтому необходимо как-нибудь передать наши изменения в репозиторий.
 +
 +# Внести изменения, например, в README в репе work и закоммитить
 +git add README
 +git commit -m "Added shared comment to readme"
 +[main 576bd94] Added shared comment to readme
 + 1 file changed, 1 insertion(+), 1 deletion(-)
 +
 +# Передать изменения в чистый репозиторий
 +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
 +   7cc9cfb..576bd94  main -> main
 +</code>
 +
 +==== Получение изменений из общего репозитория ====
 +<code bash>
 +# Перейти в репозиторий назначения
 +cd ../home
 +# Добавить чистый репозиторий work.git как shared (так же, как ранее в исходном репозитории work)
 +git remote add shared ../work.git
 +# Отслеживать ветку main в shared
 +git branch --track shared main
 +branch 'shared' set up to track 'main'.
 +# Получить изменения из 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            main       -> FETCH_HEAD
 + * [new branch]      main       -> shared/main
 +Updating 7cc9cfb..576bd94
 +Fast-forward
 + README | 2 +-
 + 1 file changed, 1 insertion(+), 1 deletion(-)
 +</code>
 +Теперь файл README изменился и в home.
 +
 +===== Git-сервер =====
 +Git умеет быть и сервером.
 +<code bash>
 +cd ..
 +ls
 +
 +    Каталог: C:\temp\githowto\repositories
 +
 +Mode                 LastWriteTime         Length Name
 +----                 -------------         ------ ----
 +d-----        02.02.2025     10:11                home
 +d-----        26.01.2025     11:59                work
 +d-----        02.02.2025     10:06                work.git
 +
 +
 +# Запуск демона git (добавить --enable=receive-pack, чтобы разрешить push. Внимание: 
 +# сервер не производит аутентификацию, поэтому любой сможет отправлять изменения в ваш репозиторий!)
 +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/output error
 +[21436] Extended attribute "host": localhost
 +[21436] Extended attribute "protocol": version=2
 +[21436] Request upload-pack for '/work.git'
 +</code>
 +
 +В другом окне терминала (прошлое занято выполняющимся сервисом):
 +<code bash>
 +cd C:\temp\githowto\repositories
 +# Клонировать work.git с сервера в локальный net_work
 +git clone git://localhost/work.git net_work
 +Cloning into 'net_work'...
 +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
 +
 +    Каталог: C:\temp\githowto\repositories\net_work
 +
 +Mode                 LastWriteTime         Length Name
 +----                 -------------         ------ ----
 +d-----        02.02.2025     10:22                css
 +-a----        02.02.2025     10:22            295 index.html
 +-a----        02.02.2025     10:22            100 README
 +</code>
  
learning/git.1737882178.txt.gz · Последнее изменение: 26.01.2025 09:02 — viacheslav

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki