Можно ли скопировать папку git в Windows для управления несколькими ветвями?

Я новичок в git, и у меня есть репозиторий git, который я использую с GitKraken. В этом репозитории у меня есть несколько веток, и я могу переходить от ветки к ветке, чтобы при необходимости вносить изменения.

Сейчас я нахожусь в ситуации, когда я буду вносить некоторые большие изменения в одну ветку, которые я не хочу фиксировать, но тем временем я хотел бы внести некоторые незначительные изменения в другую ветку.

Я привык работать с TFS и там могу просто оформить ветку в другую папку.

Я пытался просто скопировать папку, и мое первое впечатление - это должно сработать ....

Но я видел в сети заметки, в которых говорится, что вместо этого я должен клонировать репозиторий.

Версия git ниже 2.5, поэтому я не могу использовать Git-worktree.

Можно ли просто скопировать папку или это может иметь неожиданный эффект?

«что я не хочу фиксировать» - вы всегда можете зафиксировать их локально, а затем вернуться позже и отменить фиксацию, чтобы вернуть свои файлы и оставить состояние именно так, как вы этого хотите.

Rup 09.01.2019 17:30

По сути, это то, что функциональные ветки предназначены для. К вашему сведению, нет проблем с копированием вашего репозитория GIT в другую папку. Но это будет точная копия (удаленно и все), так в чем смысл? Похоже, вам нужна функциональная ветка, но не нажимайте ее, как предлагает @Rup

Liam 09.01.2019 17:36

Помните, что репозиторий GIT - это точная копия весь репозиторий. Итак, все, что есть на сервере, у вас тоже есть. Таким образом, вы можете делать все, что хотите, на своей локальной копии

Liam 09.01.2019 17:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
502
2

Ответы 2

Возможно, вы захотите посмотреть, подойдет ли вам git stashing. Не рекомендую копировать в новую папку. В основном потому, что я не знаю, возможно ли это вообще, и никогда не видел в этом рекомендации. Клонирование также должно работать, но похоже, что вы заинтересованы в хранении / хранении на полках, а не в фиксации ваших изменений в ветке 1 перед проверкой ветки 2.

https://git-scm.com/book/en/v1/Git-Tools-Stashing

Я думаю, что лучше всего работает, если у вас есть изменения, которые вы «не хотите фиксировать», но хотели бы сохранить, прежде чем проверять другую ветку.

2stacks 09.01.2019 17:48

OP спрашивает не об этом. Они хотят иметь возможность делать несколько коммитов локально. Пожалуйста, перечитайте вопрос. Я сейчас нахожусь в ситуации, когда я буду делать некоторые большие изменения в 1 ветке, которые я не хочу фиксировать.

Liam 09.01.2019 17:50

Я читаю это. «Можно ли копировать папку git?» Вы говорите, что OP хочет сделать несколько коммитов. Вы уверены, что прочитали вопрос? Также нет упоминания о пульте дистанционного управления. Что делать, если вся работа локальная и удаленной ветки нет.

2stacks 09.01.2019 17:56

Если ваш ответ «Я не знаю, возможно ли это вообще» (прямая цитата из этого ответа), это сильный намек на то, что у вас есть комментарий, а не ответ.

Ben Voigt 09.01.2019 18:07

Согласен, это должен был быть комментарий.

2stacks 09.01.2019 18:15

Да, если вы скопируете всю папку из корня кассы, включая скрытую папку .git, то вы сможете вносить изменения в каждую рабочую копию независимо. Каждый из них содержит свою собственную копию объектов репозитория, и они будут вести себя точно так же, как если бы вы запустили два отдельных клона.

Как обсуждалось в комментариях, это не обязательно хороший вариант использования для этого: было бы проще (и с большей экономией места на диске) зафиксировать ваши большие изменения в локальной ветке, чтобы затем вы могли переключиться и сделать другие изменения. В этом нет реального недостатка; если вы действительно хотите удалить эту временную фиксацию позже, это тоже легко сделать.

Однако, если вы собираетесь это сделать, возможно, вы захотите

  • сначала запустите git repack -ad, чтобы в дереве объектов было меньше файлов для копирования
  • рассмотрите возможность использования вместо этого git clone --reference, который может быть немного более экономичным на диске
  • или вы хотите чистую рабочую копию, вы можете создать новую папку рабочей копии, скопировать только скрытую папку .git в новую рабочую копию, а затем git reset --hard, чтобы проверить все файлы там.

Будут ли они действовать как клоны отдельный? Или они будут чем-то неразрывно запутанным? Например, если вы выполните фиксацию в одной и отправите ее в источник, не сможет ли другой клон затем загрузить новую ревизию во время синхронизации, поскольку в метаданных ревизии указано, что она возникла из этого GUID клона?

Ben Voigt 09.01.2019 18:06

AFAIK не существует такой вещи, как GUID клона, и сервер не отслеживает клоны, но рад быть исправленным. Я пробовал клонировать одно и то же репо дважды и различать состояние: есть различия в отметках времени в .git / logs, но файл .git / index также отличается, и это двоичный формат, поэтому я не могу легко определить, что изменилось. Я бы предположил, что любой GUID будет находиться в .git / config, но, возможно, он находится в индексе, я полагаю.

Rup 09.01.2019 19:01

Другие вопросы по теме