Git, как помещать разные рабочие копии в разные репозитории - PullRequest
2 голосов
/ 19 августа 2011

У меня возникла проблема, когда я пытаюсь отправить только новые файлы, которые я создал, в другое пустое хранилище.

Скажем, у меня было два пустых хранилища: repo1.git и repo2.git

  1. Я клонирую копию repo1.git и создаю новый файл с именем test_repo1.txt

  2. Я помещаю test_repo1.txt в начало координат (repo1.git)

  3. Теперь я создаю еще один файл с именем test_repo2.txt. Я хочу отправить ONLY test_repo2.txtмоя рабочая копия repo1.git в репозиторий repo2.git.

Итак, я выполнил следующие команды в своей рабочей копии repo1.git.

git add test_repo2.txt
git commit -m "add only test_repo2.txt file to repo2.git"
git push repo2.git master:master

Как только явыполнив вышеуказанные команды,

Я вошел в рабочую копию repo2.git и обнаружил, что файл " test_repo2.txt " существует, но "test_repo1.txt"Файл также там, что не то, что я хочу.Я только хочу, чтобы "test_repo2.txt" там не был " test_repo1.txt ".

Почему файл " test_repo1.txt " оказался в repo2.git голое хранилище?

Ваша помощь будет очень ценной.

Спасибо

Finau

1 Ответ

1 голос
/ 19 августа 2011

git толкает коммиты по следующим веткам, а не по отдельным файлам.В вашем случае у вас есть два коммита: коммит для test_repo1.txt и коммит для test_repo2.txt, но каждый из них находится в одной и той же ветке.

Когда вы добавляете test_repo1.txt git push к repo1* ветка имеет только ваш коммит для репо.Однако после того, как вы выполните git add test_repo2.txt и подтвердите его, в той же ветке теперь есть обе фиксации, поэтому оба изменения применяются к repo2 при нажатии.

Чтобы выполнить то, что вы хотитедля этого вам нужно иметь две ветви в локальной рабочей копии, назовем их branch_repo1 и branch_repo2.Вы будете git push каждую ветку к своему репо.Ваша процедура такова:

  1. git clone repo1, как и раньше, и git checkout master (или любая другая ветка, с которой вы хотите начать)
  2. git checkout -b branch_repo1, чтобы создать и проверить веткудля ваших repo1 изменений.
  3. git add test_repo1.txt и git commit и git push repo1 master (замена master любой ветвью на repo1, на которую вы хотите нажать)
  4. git checkout master снова, чтобы вернуться в исходную ветку (которая не будет иметь фиксацию для test_repo1.txt)
  5. , теперь повторите: git checkout -b branch_repo2, чтобы создать ветку для ваших repo2 изменений.
  6. git add test_repo2.txt и git commit и git push repo2 master
  7. Готово.repo1 master будет иметь коммит, который вы положили в ветку branch_repo1, а repo2 master будет иметь коммит, который вы положили в ветку branch_repo2.

Примечание , чтов вашем git push вы должны указать не только репо, но и какую ветку , на которую вы хотите перейти.Предполагая, что вы работаете с master в обоих случаях, вам нужно:

git push repo1 master # while you have the branch_repo1 branch checked out

и

git push repo2 master # while you have the branch_repo2 branch checked out

Это выполнит то, что вы хотите сделать.

(последнее замечание: я назвал ветви с префиксом branch_ вместо просто repo1 и repo2, чтобы избежать неоднозначности имени репо / ветви. Вы можете назвать ветви как хотите).

...