мерзавец ветка и слияние - PullRequest
       0

мерзавец ветка и слияние

0 голосов
/ 09 февраля 2012

Я пытаюсь понять ветки в git. Я работал с SVN, поэтому пытаюсь получить структуру каталогов

я создаю git main repo с

mkdir git_repo
cd git_repo
git init --bare
cd ../
git clone git_repo new_clone
cd new_clone
touch test.txt
git add test.txt
git commit test.txt
git push origin master
//So now the contents are in git_repo
git branch new_branch
git branch 
/*master
*new_branch is the output */
git checkout new_branch
//Switched to branch 'new'

Мой вопрос таков:

1.Как переключиться обратно на new_clone

2. Как отправить файлы в new_repo из ветки

3.Как я могу увидеть разницу в файлах между new_branch и new_clone

4.Как я могу отправить файлы на git_repo

5.Когда я использую слияние в этом случае

6.Как составить список файлов в new_branch и new_clone отдельно

Может ли кто-нибудь объяснить это примерами.

Спасибо ..

Ответы [ 2 ]

0 голосов
/ 09 февраля 2012

GIT отличается от SVN - это распределенная система контроля версий. Не думайте об этом, как о SVN с сервером и несколькими клиентами, скорее это помогает думать об этом с точки зрения одноранговой связи.

Позвольте мне сначала ответить на ваши вопросы:

  1. Переключение назад:

    Нет вопроса о переключении обратно на new_clone - new_clone является хранилищем, а не ветвью, ветви являются master и new_branch, как указано git branch. Если вы хотите переключиться на мастер (исходную ветку), используйте: git checkout master или вообще git checkout <branch-name>.

  2. Вы можете использовать git push origin new_branch, чтобы подтолкнуть ветку к источнику.

  3. Как описано в (1), нет new_clone ответвления. Используйте это: git diff new_branch master

  4. См. (2)

  5. В этом случае вы не используете слияние. Но скажем, у вас есть 2 рабочие копии, и вы хотите поделиться кодом между ними, вы можете использовать git merge для объединения изменений из одной копии в другую.

Давайте посмотрим на полный цикл, чтобы помочь вам понять все концепции. Алиса и Боб - 2 пользователя (пира), которые используют GIT:

Создать 2 пользователей Алису и Боба

sudo adduser alice 
sudo adduser bob 

Войдите как Алиса и настройте

su alice 
git config --global user.name "Alice" 
git config --global user.email alice@example.com 

Войдите как Боб и настройте

su bob 
git config --global user.name "Bob" 
git config --global user.email bob@example.com

Алиса создает GIT-репозиторий

mkdir project 
cd project/ 
git init 
echo "Some text" > test 
git add test 
git commit -m "Adding test" 
git status

Боб клонирует его, редактирует и фиксирует изменения

cd ~
git clone /home/alice/project myclone 
cd myclone/ 
git log # See the changes from Alice
echo "Some text - edited by Bob" > test 
git commit -m "Making changes to test" -a 
git diff 

Алиса объединяет изменения с Бобом

git remote add bob /home/bob/myclone 
git fetch bob 
git branch -a # To list
git log -p master..bob/master 
git merge --no-ff bob/master # Merge changes from Bob

Алиса вносит изменения в экспериментальную ветку и затем фиксирует ее:

git branch experimental 
git branch # To list
git checkout experimental 
git branch # To list
echo "Some text - edited by Bob, further edited by Alice" > test 
git commit -m "Further modifying test" -a 
git checkout master 
git log -p master..experimental 
git merge --no-ff experimental 
git branch -d experimental # To delete the branch

Боб тянет изменения:

git pull

Обратите внимание, что здесь нет центрального сервера, Алиса и Боб равноправны.

Подробнее здесь:

0 голосов
/ 09 февраля 2012
  1. Вы не можете "переключиться обратно на new_clone", потому что new_clone не является ветвью.У вас есть хранилище с двумя ветвями с именами master и new_branch.Что означает «переключиться на [путь к хранилищу]»?
  2. Я думаю, что вы хотите спросить здесь: «Как мне получить коммиты, сделанные на git_repo, в мою рабочую копию в new_clone?»Ответ: вы делаете git fetch для извлечения изменений и git merge или git rebase для их локального включения (или git pull для выполнения обоих в одной операции).
  3. git diff new_branch new_clone.Для конкретного файла git diff new_branch:path/to/file new_clone:path/to/file.Для различий с точки зрения наборов изменений, а не формата исправлений, используйте git log --oneline --left-right new_clone...new_branch или т. П.
  4. git push, как вы уже сделали.
  5. Используйте слияние, если вы хотите включить одну веткуизменения и история в другую ветку.Слияние - это очень мощная концепция, но вы уже должны быть знакомы с основной идеей SVN - git, как правило, работает лучше, потому что она лучше учитывает общую родословную между ревизиями, которые будут объединены даже в 2-х направлениях.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...