Как переместить репозиторий git с одного пульта на другой без истории? - PullRequest
1 голос
/ 06 января 2020

Мой исходный код в настоящее время размещен на VisualStudio.com (VSTS) в репозитории Git. Клиент просил, чтобы после каждого спринта код обновлялся в его собственном репозитории в bitbucket без длинной истории, которую я могу иметь на VSTS.

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

Теперь у меня уже есть источник в обоих местах. Есть ли более простой способ добиться этого? Перезапись файлов делает их не помеченными как измененные, а как удаленные и добавленные в bitbucket.

так что я могу думать об этих шагах. - Получить последнюю версию из ветки - Squa sh история локально ??? - Установить пульт для репо клиента ??? - выполнить коммит ???

Мне пришлось написать эти шаги, потому что я думаю, что люди думают, что это первый коммит, который я делаю в его репо. Нет, у меня уже был первый коммит. этот вопрос о последующих коммитах.

Ответы [ 2 ]

0 голосов
/ 06 января 2020

Вы можете git merge --squash, который сворачивает все ваши изменения в один коммит. С помощью этого метода git выполняет регулярное слияние, но не принимает вашу ветвь в качестве родителя для нового коммита. Полученные в результате фиксации коммиты будут помещены в сообщение о коммите, так что вы можете также отредактировать это. При таком подходе вы не потеряете свою историю, а сможете выполнить требования своих клиентов.

Как примечание, я никогда не работал с коммитами squa sh, поэтому не могу сказать, есть ли сторонние эффекты, такие как повторяющиеся конфликты слияния, поскольку git не знает об одних и тех же предках, когда вы вносите изменения в уже слитую ветвь.

Вот пример того, как будет выглядеть история:

$ git log --graph --all
* commit e8f2e951e35d27a3f2337dc8f9f4f45bfce40620 (HEAD -> master)
| Author: Rudi <rudi@example.com>
| Date:   Mon Jan 6 08:44:43 2020 +0100
| 
|     Squashed commit of the following:
|     
|     commit b7128a9e393e1dde70ca1191068fe6cce9e6935b
|     Author: Rudi <rudi@example.com>
|     Date:   Mon Jan 6 08:44:28 2020 +0100
|     
|         sfd
|     
|     commit d7536eab83d540275cbe8355ecb6cc3f31bbd270
|     Author: Rudi <rudi@example.com>
|     Date:   Mon Jan 6 08:44:27 2020 +0100
|     
|         sfd
|     
|     commit de9880d2b7304d65d6f43d659c5494a09e97fcf4
|     Author: Rudi <rudi@example.com>
|     Date:   Mon Jan 6 08:44:24 2020 +0100
|     
|         sfd
|   
| * commit b7128a9e393e1dde70ca1191068fe6cce9e6935b (work)
| | Author: Rudi <rudi@example.com>
| | Date:   Mon Jan 6 08:44:28 2020 +0100
| | 
| |     sfd
| | 
| * commit d7536eab83d540275cbe8355ecb6cc3f31bbd270
| | Author: Rudi <rudi@example.com>
| | Date:   Mon Jan 6 08:44:27 2020 +0100
| | 
| |     sfd
| | 
| * commit de9880d2b7304d65d6f43d659c5494a09e97fcf4
|/  Author: Rudi <rudi@example.com>
|   Date:   Mon Jan 6 08:44:24 2020 +0100
|   
|       sfd
| 
* commit 6c44f29c30d57329af492e85e56f9c4672fcbf34
  Author: Rudi <rudi@example.com>
  Date:   Mon Jan 6 08:44:09 2020 +0100

      sfd
0 голосов
/ 06 января 2020

, следуя приведенным ниже шагам:

-- Remove the history from 
 rm -rf .git

 -- recreate the repos from the current content only
 git init
 git add .
 git commit -m "Initial commit"

 -- push to the github remote repos ensuring you overwrite history
 git remote add origin git@github.com:<New Repository>
 git push -u -f origin master

Примечание: rm -rf. git удаляет вас. git папка и git pu sh -u -f мастер источника заменяет любые файлы в вашем новом хранилище с текущими файлами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...