Listar o archivar files no binarys de un repository git

Actualmente estoy trabajando en un proyecto de Java utilizando JGit. Todavía no usé JGit, pero supongo que su funcionalidad sería la misma que la de un git normal.

Lo que trato de hacer es search todos los files no binarys, y los files de un tamaño determinado de una twig de repository de git al descubierto, y archivarlos en un file zip. Esta tarea puede ser simple para un repository con un directory de trabajo, ya que simplemente puedo usar git grep -Ic '' para listr todos los files no binarys, y luego pasar esos files al git archive , sin embargo esto no es factible para repositorys simples.

Estaría agradecido por su ayuda.

Puede usar ArchiveCommand de JGit para producir un file. Su método setPaths() permite seleccionar solo ciertas routes para ser incluidas.

Para armar la list de routes, querrá analizar el tree de la confirmación para archivar. Por ejemplo:

 TreeWalk treeWalk = new TreeWalk( repository ); treeWalk.setRecursive( true ); treeWalk.addTree( commit.getTree() ); while( treeWalk .next() ) { if( !isBinary( treeWalk ) { filesToArchive.add( treeWalk.getPathString() ); } } treeWalk.close(); 

El código de ejemplo recorre todo el tree de la confirmación para ser archivado, obtiene el contenido de cada file en el tree y llama al isBinary() ficticio isBinary() para determinar si su contenido es de text o binary. Todos los files no binarys se agregan a la colección filesToArchive que se puede pasar a ArchiveCommand .

Para la implementación de isBinary() puede tener éxito al usar el soporte de attributes de JGit:

 Attributes attributes = new AttributesHandler( treeWalk ).getAttributes(); boolean binary = attributes.isSet( "binary" ); 

AttributesHandler::getAttributes() devuelve los attributes fusionados para la ruta actual representada por treeWalk .

Alternativamente, puede usar RawText::isBinary() para implementar el método isBinary() manera:

 ObjectId blobId = getObjectId( 0 ); ObjectReader objectReader = repository.newObjectReader(); ObjectLoader objectLoader = objectReader.open( blobId ); byte[] bytes = objectLoader.getBytes(); objectReader.close(); booloean binary = RawText.isBinary( bytes ); 

RawText::isBinary utiliza la misma heurística que el Git nativo para determinar si el contenido dado es binary o de text.

El command se llama git archive , y es mucho más agradable que tener que molestarse con los treees de trabajo.

Puede excluir files no deseados con el atributo export-ignore , los files .git/info/attributes repo-local (o en un repository simple como usted, solo info/attributes ) pueden ser útiles aquí. Además, git ls-files|git check-attr --stdin --all es un práctico kit de inicio para encontrar lo que ha sido labeldo con qué o para confirmaciones arbitrarias ( git ls-tree -r --name-only your.ref.here|git check-attr -a --stdin ).

Puede poner patrones arbitrarios en sus files de attributes, por ejemplo

 *.jpg export-ignore