Hallo Auge,
Momentan fahre ich lieber – wie meine Freundin zu sagen pflegt – mit der „Tschutschu“-Eisenbahn und probiere frisch implementierte Funktionen aus.
Hehe, viel Spaß.
Dazu eine Git-Frage: Kann ich ohne Patch-Datei einzelne Commits oder Dateien eines Repos in ein anderes Repo einfügen? Mit Branches eines Repos geht das ja mit Cherry-Picking. Ich vermute, ohne jetzt konkret nachgeschaut zu haben, das geht in die selbe Richtung.
Ja, kannst du. Du musst von der Subversion/CVS-Idee von Repos weg kommen; git
ist verteilt, die Trennung der unterschiedlichen Repos ist nur marginal vorhanden. Füge einfach einen Remote hinzu, mache ein git fetch
und schon kannst du wie gewohnt cherry-pick
ing betreiben:
git remote add foo https://github.com/foo/bar
git fetch foo
git cherry-pick 24324345
git show
Das geht auch mit Repos, die völlig unterschiedlich sind:
→ ckruse@sunshine ~/test % git init foo
Initialized empty Git repository in /home/ckruse/test/foo/.git/
→ ckruse@sunshine ~/test % git init bar
Initialized empty Git repository in /home/ckruse/test/bar/.git/
→ ckruse@sunshine ~/test % cd foo
→ ckruse@sunshine ~/test/foo (master) % touch test
→ ckruse@sunshine ~/test/foo (master) × % git add test
→ ckruse@sunshine ~/test/foo (master) × % git commit -m 'initial commit foo'
[master (root-commit) 0c70c2a] initial commit foo
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test
→ ckruse@sunshine ~/test/foo (master) % git log
commit 0c70c2ad85c94efe6d7dbdf836d747462871dee8
Author: Christian Kruse <cjk@defunct.ch>
Date: Mon Apr 25 14:04:20 2016 +0200
initial commit foo
→ ckruse@sunshine ~/test/foo (master) % cd ../bar
→ ckruse@sunshine ~/test/bar (master) % touch test1
→ ckruse@sunshine ~/test/bar (master) × % git add test1
→ ckruse@sunshine ~/test/bar (master) × % git commit -m 'initial commit bar'
[master (root-commit) 94e23ef] initial commit bar
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test1
→ ckruse@sunshine ~/test/bar (master) % git remote add foo ../foo
→ ckruse@sunshine ~/test/bar (master) % git fetch foo
warning: no common commits
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From ../foo
* [new branch] master -> foo/master
→ ckruse@sunshine ~/test/bar (master) % git cherry-pick 0c70c2ad85c94efe6d7dbdf836d747462871dee8
[master 7383f62] initial commit foo
Date: Mon Apr 25 14:04:20 2016 +0200
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test
→ ckruse@sunshine ~/test/bar (master) % ls
test test1
→ ckruse@sunshine ~/test/bar (master) % git log
commit 7383f62a75a84b5ab849f86cee6d36cf0cc3ec02
Author: Christian Kruse <cjk@defunct.ch>
Date: Mon Apr 25 14:04:20 2016 +0200
initial commit foo
commit 94e23efbe05b686b612a775d38de867c056e34aa
Author: Christian Kruse <cjk@defunct.ch>
Date: Mon Apr 25 14:04:47 2016 +0200
initial commit bar
→ ckruse@sunshine ~/test/bar (master) %
Allerdings könnte es dann Konflikte geben; beachte auch das warning: no common commits
.
LG,
CK