При разработке на Kotlin вы должны добавить следующие строки рядом с annotationProcessor
их аналогами:
kapt 'com.google.dagger:dagger-android-processor:2.15'
kapt 'com.google.dagger:dagger-compiler:2.15'
и добавить apply plugin: 'kotlin-kapt'
в начале того же файла.
Этот раздел выглядит для меня так:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt' // <- Add this line
apply plugin: 'io.fabric'
Оформление заказа git filter-branch .
Раздел Примеры
на странице руководства показывает, как извлечь подкаталог в его собственный проект, сохраняя при этом всю его историю и удаляя историю других файлов / каталогов (именно то, что вы ' мы ищем).
Чтобы переписать репозиторий, чтобы он выглядел так, как если бы
foodir /
был его корнем проекта, и отбросить всю остальную историю:git filter-branch --subdirectory-filter foodir - - --все
Таким образом, вы можете, например, превратить подкаталог библиотеки в собственный репозиторий.
Обратите внимание на-
, который отделяет параметрыfilter-branch
от параметров редакции, и- all
, чтобы перезаписать все ветви и теги.
Один из способов сделать это наоборот - удалить все, кроме файла, который вы хотите сохранить.
Как правило, сделайте копию репозитория, затем используйте git filter-branch
, чтобы удалить все, кроме файлов / папок, которые вы хотите сохранить.
Например, у меня есть проект, из которого я хочу извлечь файл tvnamer.py
в новый репозиторий:
git filter-branch --tree-filter 'for f in *; do if [ $f != "tvnamer.py" ]; then rm -rf $f; fi; done' HEAD
, который использует git filter-branch --tree-filter
для прохождения каждого коммита, выполнения команды и повторного подтверждения полученного содержимого каталогов. Это чрезвычайно разрушительно (так что вы должны делать это только с копией вашего репозитория!) И может занять некоторое время (около 1 минуты для репозитория с 300 коммитами и примерно 20 файлами)
Приведенная выше команда просто запускает следующее shell-скрипт для каждой ревизии, которую вы d, конечно, придется изменить (чтобы исключить ваш подкаталог вместо tvnamer.py
):
for f in *; do
if [ $f != "tvnamer.py" ]; then
rm -rf $f;
fi;
done
Самая большая очевидная проблема заключается в том, что он оставляет все сообщения фиксации, даже если они не связаны с остальными файл. Сценарий git-remove-empty-commits исправляет это ..
git filter-branch --commit-filter 'if [ z$1 = z`git rev-parse $3^{tree}` ]; then skip_commit "$@"; else git commit-tree "$@"; fi'
Вам нужно снова использовать аргумент -f
force run filter-branch
с что-нибудь в refs / original /
(которое в основном является резервной копией)
Конечно, это никогда не будет идеальным, например, если в ваших сообщениях о фиксации упоминаются другие файлы, но это примерно настолько близко, что позволяет git current (как насколько мне известно).
Опять же, запускайте это только на копии вашего репозитория! - но в целом, чтобы удалить все файлы, кроме thisismyfilename.txt:
git filter-branch --tree-filter 'for f in *; do if [ $f != "thisismyfilename.txt" ]; then rm -rf $f; fi; done' HEAD
git filter-branch -f --commit-filter 'if [ z$1 = z`git rev-parse $3^{tree}` ]; then skip_commit "$@"; else git commit-tree "$@"; fi'
Если вы хотите перенести какое-то подмножество файлов в новый репозиторий, но сохранить историю, в итоге вы получите совершенно новую историю. В основном это будет работать следующим образом:
Это должно быть довольно просто автоматизировать, если вы не против написать небольшой, но сложный сценарий. Прямолинейно, да, но также и болезненно. В прошлом люди переписывали историю в Git, вы можете выполнить поиск по этому запросу.
В качестве альтернативы: клонировать репозиторий и удалить документ в клоне, удалить приложение в оригинале. Это займет одну минуту, это гарантированно сработает, и вы можете вернуться к более важным вещам, чем попытки очистить историю git. И не беспокойтесь о пространстве на жестком диске, занятом избыточными копиями истории.
В настоящее время есть гораздо более простой способ сделать это, чем вручную использовать git filter-branch: git subtree
ПРИМЕЧАНИЕ git-subtree
теперь является частью git
(если вы устанавливаете contrib) начиная с 1.7.11, так что у вас, возможно, уже есть он установлен. Вы можете проверить, выполнив git subtree
.
Чтобы установить git-subtree из источника (для более старых версий git):
git clone https://github.com/apenwarr/git-subtree.git
cd git-subtree
sudo rsync -a ./git-subtree.sh /usr/local/bin/git-subtree
Или, если вам нужны страницы руководства и все
make doc
make install
Разделите больший на меньшие части:
# Go into the project root
cd ~/my-project
# Create a branch which only contains commits for the children of 'foo'
git subtree split --prefix=foo --branch=foo-only
# Remove 'foo' from the project
git rm -rf ./foo
# Create a git repo for 'foo' (assuming we already created it on github)
mkdir foo
pushd foo
git init
git remote add origin git@github.com:my-user/new-project.git
git pull ../ foo-only
git push origin -u master
popd
# Add 'foo' as a git submodule to `my-project`
git submodule add git@github.com:my-user/new-project.git foo
Для получения подробной документации (справочная страница), пожалуйста, прочтите git-subtree.txt
.