Git clone nenaklonuje balíčky z vlasních repozitářů do vendor

jikki
Člen | 73
+
0
-

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

CZechBoY
Člen | 3608
+
0
-

Neulozil se ti jako submodul? Zkus git submodule init && git submodule update

jikki
Člen | 73
+
0
-

@CZechBoY Zřejmě ano, se submoduly však zatím nemám zkušenost. Jak to prosím tě udělat, aby to bylo bez submodulů?
díky moc

CZechBoY
Člen | 3608
+
0
-

Necommituj ty slozky je jako submoduly :-)

jikki
Člen | 73
+
0
-

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)

CZechBoY
Člen | 3608
+
0
-

Zkus preinstalovat composer pres composer install —prefer-dist

pak zkontroluj .gitmodules v rootu repozitare

jikki
Člen | 73
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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

jikki
Člen | 73
+
0
-

Udělal jsem přesně jak píšeš, ale nepomáhá to.
Vendor potřebuji.

David Matějka
Moderator | 6445
+
0
-

a zkousel si smazat ty .git slozky, jak je v tom odkazu, co jsem posilal?

jikki
Člen | 73
+
0
-

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
+
0
-

muzes na to vyuzit treba post-update script: https://getcomposer.org/…s/scripts.md

Marek Bartoš
Nette Blogger | 1274
+
0
-

Co takto? Mělo by být možné ty složky z commitu vyjmout

/vendor/**/**/.git

jikki
Člen | 73
+
0
-

Nejde to :( Zkoušel jsem ještě i kombinace hvězdiček a lomítek, ale nepovedlo se.

chemix
Nette Core | 1310
+
0
-

Me pomaha composer cleaner od dg https://github.com/…oser-cleaner

jikki
Člen | 73
+
0
-

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.

CZechBoY
Člen | 3608
+
+1
-

Je potreba aby mely knihovny spravne nastaveny autoloading a pokud pouzivas nejaky neautoloadovane souboru z vendor slozky tak je potreba je uvest v cleaner ignore.