Есть ли способ указать git включать только определенные файлы вместо игнорирования определенных файлов?

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

  1. Создать класс аннотации, который будет использоваться в полях, d like excluded
  2. Определить класс, который реализует интерфейс ExclusionStrategy от Google
  3. . Создайте простой метод для создания объекта GSON с использованием GsonBuilder (аналогично объяснению Артура)
  4. Аннотировать поля, которые необходимо исключить по мере необходимости
  5. Применить правила сериализации к вашему объекту com.google.gson.Gson
  6. Сериализовать свой объект

Вот код:

1)

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
public @interface GsonExclude {

}

2)

import com.google.gson.ExclusionStrategy;
import com.google.gson.FieldAttributes;

public class GsonExclusionStrategy implements ExclusionStrategy{

    private final Class<?> typeToExclude;

    public GsonExclusionStrategy(Class<?> clazz){
        this.typeToExclude = clazz;
    }

    @Override
    public boolean shouldSkipClass(Class<?> clazz) {
        return ( this.typeToExclude != null && this.typeToExclude == clazz )
                    || clazz.getAnnotation(GsonExclude.class) != null;
    }

    @Override
    public boolean shouldSkipField(FieldAttributes f) {
        return f.getAnnotation(GsonExclude.class) != null;
    }

}

3)

static Gson createGsonFromBuilder( ExclusionStrategy exs ){
    GsonBuilder gsonbuilder = new GsonBuilder();
    gsonbuilder.setExclusionStrategies(exs);
    return gsonbuilder.serializeNulls().create();
}

4)

public class MyObjectToBeSerialized implements Serializable{

    private static final long serialVersionID = 123L;

    Integer serializeThis;
    String serializeThisToo;
    Date optionalSerialize;

    @GsonExclude
    @ManyToOne(fetch=FetchType.LAZY, optional=false)
    @JoinColumn(name="refobj_id", insertable=false, updatable=false, nullable=false)
    private MyObjectThatGetsCircular dontSerializeMe;

    ...GETTERS AND SETTERS...
}

5)

В первом случае null передается конструктору, вы можете указать другой класс, который должен быть исключен, - обе опции добавляются ниже

Gson gsonObj = createGsonFromBuilder( new GsonExclusionStrategy(null) );
Gson _gsonObj = createGsonFromBuilder( new GsonExclusionStrategy(Date.class) );

6)

MyObjectToBeSerialized _myobject = someMethodThatGetsMyObject();
String jsonRepresentation = gsonObj.toJson(_myobject);

или, чтобы исключить объект Date

String jsonRepresentation = _gsonObj.toJson(_myobject);
144
задан Jakub Narębski 14 August 2009 в 20:53
поделиться

2 ответа

Мне самому не приходилось пробовать это, но, судя по тому, что я читал TFM , похоже, что отрицательный шаблон сделает то, что вы хотите. Вы можете переопределить записи в .gitignore более поздними отрицательными записями. Таким образом, вы можете сделать что-то вроде:

*.c
!frob_*.c
!custom.c

Чтобы он игнорировал все файлы .c, кроме custom.c и все, что начинается с "frob _"

211
ответ дан 23 November 2019 в 22:20
поделиться

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

+ .git
|    (...)
+ bin
|    my_exe.exe
|    my_output.txt
+ src
     some_file.c
     some_file.h 

... и затем только добавляют материал в src/ в мой репозиторий и игнорируют bin/ полностью.

1
ответ дан 23 November 2019 в 22:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: