1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-rclone

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
CONTRIBUTING.md 14 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 03.12.2024 15:32 d523bee
git checkout my-new-feature      # Чтобы переключиться на вашу ветку
git status                       # Чтобы увидеть новые и изменённые файлы
git add FILENAME                 # Чтобы выбрать FILENAME для коммита
git status                       # Чтобы проверить изменения, которые будут зафиксированы
git commit                       # Чтобы сделать коммит
git log                          # Чтобы проверить коммит. Используйте q, чтобы выйти из лога

Вы можете изменить сообщение или изменения в последнем коммите с помощью:

git commit --amend

Если вы вносите изменения в коммиты, которые были отправлены в GitHub, то вам придётся [заменить ваши ранее отправленные коммиты](#замена-ваших-ранее-отправленных-коммитов).

### Замена ваших ранее отправленных коммитов

Обратите внимание, что вы собираетесь переписать историю GitHub вашей ветки. Рекомендуется привлечь ваших соавторов перед изменением коммитов, которые были отправлены в GitHub.

Ваши ранее отправленные коммиты заменяются на:

git push --force origin my-new-feature 

### Основывание ваших изменений на последней версии master

Чтобы основывать ваши изменения на последней версии [rclone master](https://github.com/rclone/rclone/tree/master) (upstream):

git checkout master
git fetch upstream
git merge --ff-only
git push origin --follow-tags    # Дополнительное обновление вашего форка на GitHub
git checkout my-new-feature
git rebase master

Если вы перебазируете коммиты, которые были отправлены в GitHub, то вам придётся [заменить ваши ранее отправленные коммиты](#замена-ваших-ранее-отправленных-коммитов).

### Объединение ваших коммитов в один

Чтобы объединить ваши коммиты в один:

git log                          # Чтобы посчитать количество коммитов для объединения, например, последние 2
git reset --soft HEAD~2          # Чтобы отменить 2 последних коммита
git status                       # Чтобы убедиться, что всё в порядке

Если всё в порядке, то сделайте новый объединённый коммит:

git commit                       # Чтобы зафиксировать отменённые коммиты как один

в противном случае вы можете откатиться назад с помощью:

git reflog                       # Чтобы проверить, что HEAD{1} — это ваше предыдущее состояние
git reset --soft 'HEAD@{1}'      # Чтобы вернуться к вашему предыдущему состоянию

Если вы объединяете коммиты, которые были отправлены в GitHub, то вам придётся [заменить ваши ранее отправленные коммиты](#замена-ваших-ранее-отправленных-коммитов).

Совет: Возможно, вам понравится использовать git rebase -i master, если у вас есть опыт или более сложная ситуация.

### Непрерывная интеграция GitHub

В настоящее время rclone использует [GitHub Actions](https://github.com/rclone/rclone/actions) для сборки и тестирования проекта, который должен автоматически стать доступным для вашего форка со вкладки «Actions» в вашем репозитории.

## Тестирование

### Тесты качества кода

Если вы установите golangci-lint, то вы сможете запустить те же тесты, что и в CI, что может быть очень полезно.

Вы можете запустить их с make check или с golangci-lint run ./...

Использование этих тестов гарантирует, что вся кодовая база rclone соответствует одним и тем же стандартам кодирования. Эти тесты также проверяют наличие простых ошибок (например, забывание проверить возврат ошибки).

### Быстрое тестирование

Тесты rclone запускаются из среды тестирования go, поэтому на верхнем уровне вы можете запустить это, чтобы запустить все тесты.

go test -v ./...

Также вы можете использовать make, если ваша платформа его поддерживает

make quicktest

Быстрый тест [автоматически запускается GitHub](#непрерывная-интеграция-GitHub) при отправке вашей ветки в GitHub.

### Тестирование бэкенда

rclone содержит смесь модульных тестов и интеграционных тестов. Поскольку сложно (и в некоторых отношениях бессмысленно) тестировать облачные системы хранения данных, высмеивая все их интерфейсы, модульные тесты rclone могут работать с любым бэкендом. Это делается путём создания специально названных удалённых устройств в файле конфигурации по умолчанию.

Если бы вы хотели протестировать изменения в бэкенде drive, то вам нужно было бы создать удалённое устройство под названием TestDrive.

Затем вы можете запустить модульные тесты в каталоге drive. Эти тесты пропускаются, если не определён TestDrive:.

cd backend/drive
go test -v

Затем вы можете выполнить
``` Обновить все модули до их последних стабильных версий. Зафиксируйте изменения одним коммитом, как указано выше.

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

## Обновление бэкенда
Если вы обновляете бэкенд, пожалуйста, запустите юнит-тесты и интеграционные тесты для этого бэкенда.

Предполагая, что бэкенд называется `remote`, создайте запись конфигурации под названием `TestRemote` для использования тестами.

Теперь перейдите в каталог `remote` и запустите `go test -v`, чтобы запустить юнит-тесты.

Затем перейдите в каталог `fs` и запустите `go test -v -remote TestRemote:`, чтобы запустить интеграционные тесты.

Следующий раздел содержит более подробную информацию о тестах.

## Написание нового бэкенда
Выберите имя. В документации здесь будет использоваться `remote` в качестве примера.

Обратите внимание, что в терминологии rclone бэкенд файловой системы называется удалённым или fs.

### Исследование
- Посмотрите на интерфейсы, определённые в `fs/types.go`.
- Изучите один или несколько существующих удалённых серверов.

### Начало работы
- Создайте `backend/remote/remote.go` (скопируйте это из аналогичного удалённого сервера).
    - box — хороший вариант для начала, если у вас есть удалённый сервер на основе каталогов (и показывает, как использовать кэш каталогов).
    - b2 — хороший вариант, если у вас есть удалённое хранилище на основе корзины.
- Добавьте свой удалённый сервер в импорт в `backend/all/all.go`.
- Бэкенды на основе HTTP проще всего поддерживать, если они используют модуль rclone [lib/rest](https://pkg.go.dev/github.com/rclone/rclone/lib/rest), но если есть действительно хороший Go SDK от провайдера, используйте его вместо этого.
- Постарайтесь реализовать как можно больше дополнительных методов, так как это сделает удалённый сервер более удобным в использовании.
- Используйте [lib/encoder](https://pkg.go.dev/github.com/rclone/rclone/lib/encoder), чтобы убедиться, что мы можем кодировать любое имя пути, и `rclone info`, чтобы определить необходимые кодировки.
    - `rclone purge -v TestRemote:rclone-info`
    - `rclone test info --all --remote-encoding None -vv --write-json remote.json TestRemote:rclone-info`
    - `go run cmd/test/info/internal/build_csv/main.go -o remote.csv remote.json`
    - откройте `remote.csv` в электронной таблице и изучите его.

### Рекомендации для быстрого слияния
- **Используйте** [lib/rest](https://pkg.go.dev/github.com/rclone/rclone/lib/rest), если вы реализуете бэкенд, подобный REST, и анализируете XML/JSON в бэкенде.
- **Используйте** клиент или транспорт rclone из [fs/fshttp](https://pkg.go.dev/github.com/rclone/rclone/fs/fshttp), если ваш бэкенд основан на HTTP — это добавляет такие функции, как `--dump bodies`, `--tpslimit`, `--user-agent`, и вам не нужно ничего кодировать!
- **Следуйте** точно своему примеру бэкенда — используйте тот же порядок кода, имена функций, макет, структуру. **Не** перемещайте вещи и **не** удаляйте комментарии.
- **Не** разбивайте свой бэкенд на `fs.go` и `object.go` (есть несколько подобных бэкендов — не следуйте им!).
- **Создайте** определения типов API в отдельном файле — предпочтительно `api/types.go`
- **Помните**, что нам нужно поддерживать >50 бэкендов, поэтому важно, чтобы они были максимально похожи друг на друга!

### Юнит-тесты
- Создайте запись конфигурации под названием `TestRemote` для использования юнит-тестами.
- Создайте файл `backend/remote/remote_test.go` — скопируйте и настройте свой пример удалённого доступа.
- Убедитесь, что все тесты пройдены с помощью `go test -v`.

### Интеграционные тесты
- Добавьте свой бэкенд в `fstest/test_all/config.yaml`
    - Как только вы это сделаете, вы сможете использовать платформу интеграционного тестирования из корня проекта:
    - go install ./...
    - test_all -backends remote

Или, если вы хотите запустить интеграционные тесты вручную:

- Убедитесь, что интеграционные тесты пройдены:
    - `cd fs/operations`
    - `go test -v -remote TestRemote:`
    - `cd fs/sync`
    - `go test -v -remote TestRemote:`
- Если ваш удалённый сервер определяет `ListR`, проверьте также:
    - `go test -v -remote TestRemote: -fast-list`

Дополнительную информацию об интеграционных тестах см. в разделе [тестирование](#тестирование).

### Документация бэкенда
Добавьте свой бэкенд в документацию — вам нужно будет выбрать значок для него на [fontawesome](http://fontawesome.io/icons/). Храните списки удалённых серверов в алфавитном порядке по полному названию удалённого сервера (например, `drive` упорядочивается как).

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/mirrors-rclone.git
git@api.gitlife.ru:oschina-mirror/mirrors-rclone.git
oschina-mirror
mirrors-rclone
mirrors-rclone
master