Вы должны выполнить следующие действия:
Откройте файл конфигурации php, который находится в следующем каталоге
C: \ xampp \ php \ php.ini
. Внутри этого файла найдите раздел расширения и раскомментируйте следующие строки
extension = php_pdo_pgsql.dll
extension = php_pgsql.dll
и перезапустите apache
Вы можете попробовать сами и посмотреть. Вы можете создать локальный репозиторий git для воспроизведения с помощью:
#! /bin/bash
set -e
mkdir repo
cd repo
git init
touch file
git add file
git commit -m 'init'
echo a > file0
git add file0
git commit -m 'added a to file'
git checkout -b A
echo b >> fileA
git add fileA
git commit -m 'b added to file'
echo c >> fileA
git add fileA
git commit -m 'c added to file'
git checkout -b B
echo x >> fileB
git add fileB
git commit -m 'x added to file'
echo y >> fileB
git add fileB
git commit -m 'y added to file'
cd ..
git clone repo rebase
cd rebase
git checkout master
git checkout A
git checkout B
git rebase master
cd ..
git clone repo onto
cd onto
git checkout master
git checkout A
git checkout B
git rebase --onto master A B
cd ..
diff <(cd rebase; git log --graph --all) <(cd onto; git log --graph --all)
Различия:
git rebase master
*---*---* [master]
\
*---*---*---* [A]
\
*---*---* [B](HEAD)
Ничего не произошло. Никаких новых коммитов в ветви master
с момента создания ветви B
.
git checkout master
*---*---* [master](HEAD)
\
*---*---*---* [A]
\
*---*---* [B]
git merge B
*---*---*-----------------------* [Master](HEAD)
\ /
*---*---*---* [A] /
\ /
*---*---* [B]
git rebase --onto master A B
*---*---*-- [master]
|\
| *---*---*---* [A]
|
*---*---* [B](HEAD)
git checkout master
*---*---*-- [master](HEAD)
|\
| *---*---*---* [A]
|
*---*---* [B]
git merge B
*---*---*----------------------* [master](HEAD)
|\ /
| *---*---*---* [A] /
| /
*---*--------------* [B]
Я хочу объединить мои изменения B (и только мои изменения B, без изменений A) в master
blockquote>Будьте внимательны, что вы понимаете для «только мои изменения B».
В первом наборе ветвь
B
(перед окончательным слиянием) :*---*---* \ *---*---* \ *---*---* [B]
И во втором наборе ваша ветвь B:
*---*---* | | | *---*---* [B]
Если я правильно понимаю, то, что вы хотите, это только бит B, который не находится в ветви A , Итак, второй набор является правильным выбором для вас до слияния.
git log --graph --decorate --oneline A B master
(или эквивалентный инструмент GUI) можно использовать после каждой команды git для визуализации изменений.
Это начальное состояние репозитория, а B
- текущая ветка.
(B) git log --graph --oneline --decorate A B master
* 5a84c72 (A) C6
| * 9a90b7c (HEAD -> B) C9
| * 2968483 C8
| * 187c9c8 C7
|/
* 769014a C5
* 6b8147c C4
* 9166c60 C3
* 0aaf90b (master) C2
* 8c46dcd C1
* 4d74b57 C0
Вот скрипт для создания репозитория в этом состоянии.
#!/bin/bash
commit () {
for i in $(seq $1 $2); do
echo article $i > $i
git add $i
git commit -m C$i
done
}
git init
commit 0 2
git checkout -b A
commit 3 6
git checkout -b B HEAD~
commit 7 9
Первая команда rebase ничего не делает.
(B) git rebase master
Current branch B is up to date.
Проверка out master
и слияние B
просто указывает master
при том же фиксации, что и B
, (т.е. 9a90b7c
). Никаких новых коммитов не создано.
(B) git checkout master
Switched to branch 'master'
(master) git merge B
Updating 0aaf90b..9a90b7c
Fast-forward
<... snipped diffstat ...>
(master) git log --graph --oneline --decorate A B master
* 5a84c72 (A) C6
| * 9a90b7c (HEAD -> master, B) C9
| * 2968483 C8
| * 187c9c8 C7
|/
* 769014a C5
* 6b8147c C4
* 9166c60 C3
* 0aaf90b C2
* 8c46dcd C1
* 4d74b57 C0
Вторая команда rebase копирует коммиты в диапазоне A..B
и указывает их на master
. Три коммиты в этом диапазоне: 9a90b7c C9, 2968483 C8, and 187c9c8 C7
. Копии - новые коммиты с их собственными идентификаторами фиксации; 7c0e241
, 40b105d
и 5b0bda1
. Фигуры master
и A
не изменяются.
(B) git rebase --onto master A B
First, rewinding head to replay your work on top of it...
Applying: C7
Applying: C8
Applying: C9
(B) log --graph --oneline --decorate A B master
* 7c0e241 (HEAD -> B) C9
* 40b105d C8
* 5b0bda1 C7
| * 5a84c72 (A) C6
| * 769014a C5
| * 6b8147c C4
| * 9166c60 C3
|/
* 0aaf90b (master) C2
* 8c46dcd C1
* 4d74b57 C0
Как и раньше, проверка master
и слияние B
просто указывает master
на ту же фиксацию, что и B
, ( т.е. 7c0e241
). Никаких новых коммитов не создано.
Исходная цепочка фиксаций, указывающая B
, все еще существует.
git log --graph --oneline --decorate A B master 9a90b7c
* 7c0e241 (HEAD -> master, B) C9
* 40b105d C8
* 5b0bda1 C7
| * 5a84c72 (A) C6
| | * 9a90b7c C9 <- NOTE: This is what B used to be
| | * 2968483 C8
| | * 187c9c8 C7
| |/
| * 769014a C5
| * 6b8147c C4
| * 9166c60 C3
|/
* 0aaf90b C2
* 8c46dcd C1
* 4d74b57 C0
Перед любой из данных операций ваш репозиторий выглядит следующим образом:
o---o---o---o---o master
\
x---x---x---x---x A
\
o---o---o B
После стандартного rebase (без --onto master
) структура будет:
o---o---o---o---o master
| \
| x'--x'--x'--x'--x'--o'--o'--o' B
\
x---x---x---x---x A
. .. где x'
фиксируется из ветви A
. (Обратите внимание, как они теперь дублируются в базе ветки B
.)
Вместо этого, с помощью команды --onto master
будет создана следующая более чистая и простая структура:
o---o---o---o---o master
| \
| o'--o'--o' B
\
x---x---x---x---x A