No support for local git source clones

A user wants to edit source files locally in his favourite IDE. Therefore, he wants to use the usual ways to retrieve source files. Typically, this is a git clone from a git repository having the respective source files.

A user does not want to clone the whole winery repository, as this might a) be too large b) not focused enough. It would be beneficial to have the source of an artifact template available as git checkout.

The source files of an artifact implementation are currently directly editable in the winery once they are uploaded. The only way to edit sources locally is to download and upload them again. The solution for the user should be:

  • easy to use

  • scalable in terms of storage required in Winery’s repository

Considered Alternatives

  • No support for local clones

  • Git repositories as submodules

  • Using filter-branch (https://help.github.com/articles/splitting-a-subfolder-out-into-a-new-repository/)

  • Using git sparse-checkout to create a local clone (https://gist.github.com/sumardi/5559896)

Decision Outcome

  • Chosen Alternative: no support for local edit

Since all alternatives require either too many additional git repositories or are very inconvenient to apply for the user, we decided to not support any clone/push functionality.

Pros and Cons of the Alternatives

No support for local edit

  • + no changes needed

  • - no local edit support

Git repositories as submodules

  • + simple git cloning possible

  • + additional repositories can be cloned into winery-repository as submodules

  • + separate version history

  • - one repository for each implementation

  • - each separate repository has to be created on the git remote of winery (e.g., GitHub)

Using filter-branch on sever’s side

  • + no changes needed in the existing repositories

  • + git filter-branch --prune-empty --subdirectory-filter allows to skip any subdirectory

  • - server needs to execute very large filter commands for each user for each requested artifact template

  • - the mapping back from the filtered repository to the full repository is cumbersome.

  • - merge conflicts are not resolved by git tooling automatically

Using filter-branch on user’s side

  • + no changes needed in the existing repositories

  • + git filter-branch --prune-empty --subdirectory-filter allows to skip any subdirectory

  • - user needs to execute very large filter commands

  • - the mapping back from the filtered repository to the full repository is cumbersome.

  • - requires the user to type the commands manually

git sparse checkout

  • + no changes needed in the existing repositories

  • - requires the user to type the commands manually

License

Copyright (c) 2017 Contributors to the Eclipse Foundation

See the NOTICE file(s) distributed with this work for additional information regarding copyright ownership.

This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0, or the Apache Software License 2.0 which is available at https://www.apache.org/licenses/LICENSE-2.0.

SPDX-License-Identifier: EPL-2.0 OR Apache-2.0