I've tackling this same issue by working with git submodules
and buildroot br-external
feature.
In this sense, you only need to start an empty repository and import a buildroot release as a submodule of it.
mkdir myrepo; cd myrepo
git init
touch README; git add README; git commit -m "Initial commit"
git submodule add -b <preferred release/tag/branch> git://git.buildroot.net/buildroot
git submodule update --init
Then you can create a br-external
directory and populate it similar as buildroot's own package/configs/board directories as explained in BR2_EXTERNAL
documentation1.
mkdir br-external
# below command assumes you have all structures ready somewhere else
cp -fva .../configs .../package .../board br-external
touch br-external/{Config.in,external.mk}
(edit Config.in and external.mk)
git add br-external
After doing so, you only need to run buildroot defconfig step passing the absolute path to your br-external directory, like this.
make BR2_EXTERNAL=$PWD/br-external -C buildroot <boardname>_defconfig
Your BR2_EXTERNAL locations gets cached for further invocations.
The nicest parts of this is that you only need to versionate what's inside br-external and buildroot builds up the configuration menu in a way that all your custom stuff gets properly separated ("User provided options" menu entry).
Also, if you decide to bump-up buildroot release to a newer one, the only trouble is to upgrade the submodule and commit it. Perfect for configuration management.
cd buildroot
git pull origin latest-release
cd ..
git add buildroot
git commit -m 'buildroot latest-release upgrade'