Git clone nenaklonuje balíčky z vlasních repozitářů do vendor
- jikki
- Člen | 73
Ahojte,
Mám Windows server s Git repozitářemi, kde jsou celé nette projekty a balíčky s vlastními komponentami. Git je dostupný přes HTTP pomocí Gitea.
Na lokální mašině si vytvářím projekt
composer create-project nette/web-project Projekt
git init
Abych mohl nainstalovat balíčky z repozitáře na mém serveru, tak do composer.json přidám
"repositories": [
{
"type": "vcs",
"url": "http://jmenoserveru/git/test/komponenta.git"
}
Pak nainstaluji balíček pomocí příkazu
composer require test/komponenta
Balíček se bez problému přidá do projektu. V .gitignore mám pouze
local.neon config. Tzn. že commituji i složku vendor.
Do vývojového repozitáře si přidám remote pro nahrání do bare
repozitáře na serveru a projekt tam nahraji.
Nyní k problému.
Projekt dám naklonovat z bare repozitáře na produkci. Data se přenesou,
složka vendor obsahuje jednotlivé balíčky nette, ale neobsahuje balíček
s mou komponentou z repozitářů na mém server. Vytvoří se pouze složka
test/komponenta, která je ale prázdná.
Komponenta má následující composer.json
{
"name": "test/komponenta",
"description": "...",
"require": {
"php": ">=7.1",
"nette/application": "^3.0",
"nette/forms": "^3.0",
"nette/utils": "^3.0",
"nette/di": "^3.0"
},
"autoload": {
"psr-4": {
"aczs\\scanner\\": "src/"
}
}
}
Zkoušel jsem ještě i upravit composer.json v projektu a balíček natahovat po síti přes sdílení. Nicméně chová se to úplně stejně.
"repositories": [
{
"type": "vcs",
"url": "//jmenoserveru/repository_packages/test/komponenta.git"
}
],
composer update
nebo composer install
hlásí, že
složka test/komponenta je prázdná. Když ji smažu a pak spustím příkaz
znova, tak se balíček doinstaluje. Pokud však vydám novou verzi komponenty a
aktualizuji si ji v projektu na vývojové mašině, pak nahraju do remote, pak
stáhnu na produkci, tak se můj balíček opět neaktualizuje.
Poradí prosím někdo co dělám špatně?
Předem moc děkuji
- jikki
- Člen | 73
No já právě zatím nekomitoval nikdy nic jako submodul :) veškeré
commity byly normální.
Když nainstaluji mou komponentu do projektu, tak obsahuje i složku .git
oproti jiným balíčkům. Předpokládám, že právě kvůli tomu se při
klonování repozitáře projektu nenahraje samotný kód komponenty. Jinak si
to neumím vysvětlit. Jak se ale té složky zbavit. Mám v tom trochu
guláš :)
Editoval jikki (5. 11. 2019 8:10)
- jikki
- Člen | 73
To nainstaluje komponentu úplně stejně. A složku .gitmodules nemám nikde :)
Když jsem měl komponentu na githubu jako soukromý repozitář a do composer.json jsem v projektu přidal adresu takto, tak to nainstalovalo správně, bez složky .git.
"repositories": [
{
"type": "vcs",
"url": "git@github.com:jmeno/komponenta.git"
}
],
A když jsem adresu přidal jako https, tak to nainstalovalo i se složkou .git a dělalo to problém jako teď
"repositories": [
{
"type": "vcs",
"url": "https://github.com/com:jmeno/komponenta.git"
}
],
Bohužel nyní s Gitea nemohu mít ssh přístup a musím tedy rozjet https.
- Marek Bartoš
- Nette Blogger | 1274
https://github.com/com:jmeno/komponenta.git
Url pro https by měla používat lomítko, ne dvojtečku.
tak to nainstalovalo i se složkou .git
David ti už poslal návod ;) Nesmíš commitovat .git složky ve vendoru.
Takže použij jednu z těch čtyř možností v odkazu, nejjednodušší budeš mít do
.gitignore
přidat /vendor/**/.git
- jikki
- Člen | 73
Dvojtečka u https byl jen překlep tady na foru :)
Zkouším v projektu do .gitignore přidat /vendor/**/.git. Pak push do bare repo a klonovat jinde. Složka mé komponenty ve vendor je opět prázdná. Zkoušel jsem smazat celou složku vendor a composer.lock a natáhnout znova. Zkoušel jsem i vytvořit jak pracovní tak bare repozitář vytvořit znova. Nevím co dělám špatně.
- Marek Bartoš
- Nette Blogger | 1274
Ujistil jsi se, že .git složky nejsou commitnuté? Smaž vendor, commitni,
pak znova stáhni a commitni ho už bez .git složek.
Btw, ideální by bylo vendor vůbec necommitovat
- David Matějka
- Moderator | 6445
a zkousel si smazat ty .git slozky, jak je v tom odkazu, co jsem posilal?
- jikki
- Člen | 73
Zkoušel jsem smazat vendor, commit, composer install, smazat složku .git z mé komponenty ve vendor, commit, push. Pak při klonování jinám to udělalo správně, ve vendor jsem viděl i zdrojaky mé komponenty. Při composer update se ale natáhne opět složka .git a před commitem ji musít opět smazat. Tak fajn, aspoň, že to takto funguje, jen musím myslet na to smazání.
/vendor/**/.git tohle v .gitignore v projektu nemá žádný efekt.
Ještě jsem zkoušel nahrát totožnou komponentu na github a přidat si ji do projektu. Fungovalo to správně přes https i git@ , tedy nenatahovalo to složku .git.
Dále jsem zkoušel natáhnout bare repozitář přímo z disku. Chová se to stejné jako z Gitea, tzn stahuje to i .git.
Zajímalo by mě proč se to chová jinák z githubu a jinak z lokálních repozitárů.
Budu nad tím dál kolaborovat, když na něco přijdu, tak sem napíšu.
Jinak moc díky pánové za pomoc :)
- David Matějka
- Moderator | 6445
muzes na to vyuzit treba post-update script: https://getcomposer.org/…s/scripts.md
- Marek Bartoš
- Nette Blogger | 1274
Co takto? Mělo by být možné ty složky z commitu vyjmout
/vendor/**/**/.git
- jikki
- Člen | 73
chemix napsal(a):
Me pomaha composer cleaner od dg https://github.com/…oser-cleaner
Tohle zdá se, že pomáha efektivně. Má to nějaké stinné stránky? Z projektu mi to smazalo přes 1000 souborů, ale zdá se že vše funguje.