Git: Erste Babyschritte mit Branches und Mergen

    Warnung: Das sind die Aufzeichnungen einen Anfängers und keinesfalls als “Best Practise” geeigent. Use at your own risk**

    Aber vielleicht hilft es ja auch mal anderen die ersten Schritte zu wagen.

    Bisher benutze ich Git nur zu einfachen Versionierung in einem Entwicklungszweig. An Branches und Merges habe ich mich bisher nicht getraut. Es gab noch keinen echten Anwendungsfall.

    Folgendes Ziel möchte ich erreichen. Ich habe eine Webseite die ich kopieren und in verschiedenen Situationen einsetzen möchte (die Lizenz lässt das zu). Für die unterschiedlichen Bereiche sollen sowohl textuelle als auch farbliche Anpassungen geschehen. Nun möchte ich natürlich Änderungen die ich im Hauptzeig vollziehe auch automatisch in die verschiedenen anderen Versionen übernehmen.

    Git bietet die Funktion von Branches. Die sind zwar eigentlich nicht für so einen Fall vorgesehen da man Branches dazu benutzen soll um Entwicklungen später wieder in den Hauptzweig überführen zu können. Das ist in meinem Fall zwar nicht der Fall aber trotzdem scheint mir dies aktuell die einfachste Möglichkeit zu sein. Wenn man es richtig machen würde sollte man wohl eher mit anderen Ansätzen arbeiten.

    Wir haben also ein Git Repository. Von diesem Repository erstellen ich einen Branch

      git checkout -b rc-its
    

    Wechseln zwischen den Branches geht mit

     git checkout master
     git checkout rc-its
    

    In welchem Branch ich bin und welche Branches es gibt findet man so:

     git branch -a      
     * master
       rc-its
       remotes/origin/master
    

    Wenn ich also auf dem Master Änderungen durchführe (z.B. ein sed-Befehl )

      git:(master) find ./ -type f -exec sed -i -e 's/BITS/ITS-RC/g' {} \;
    

    und diese dann einchecke

     git:(master) ✗ git commit * -m "bits nach rc-its in allen dokumenten "
     git:(master) git push  
    

    So kann ich die jetzt durch einen Wechsel des Branches und einen anschließenden Merge aus dem Master in den anderen Zweig übernehmen.

    git:(master) git checkout rc-its    
    git:(rc-its) git merge master
    

    Um jetzt noch den Branch auf gitlab zu pflegen

     git:(rc-its) git push -u origin rc-its
    

    Wenn ich jetzt im Branch ein anderes Logo haben möchte dann tauschen ich das einfach aus. Danach sehen wir

      git status
      Auf Branch rc-its
      Ihr Branch ist auf dem selben Stand wie 'origin/rc-its'.
      Änderungen, die nicht zum Commit vorgemerkt sind:
      (benutzen Sie "git add <Datei>...", um die Änderungen zum Commit vorzumerken)
      (benutzen Sie "git checkout -- <Datei>...", um die Änderungen im Arbeitsverzeichnis zu verwerfen)
    
      geändert:       bits/images/design/header.jpg
    
      keine Änderungen zum Commit vorgemerkt (benutzen Sie "git add" und/oder "git commit -a")
    

    Ein Commit für das neue Logo

       git:(rc-its) ✗ git commit bits/images/design/header.jpg -m " kunden logo"
       [rc-its 593eef6]  kunden logo
       1 file changed, 0 insertions(+), 0 deletions(-)
       rewrite bits/images/design/header.jpg (99%)
    

    und dann hoch schieben:

      git push
      Zähle Objekte: 6, Fertig.
      Delta compression using up to 4 threads.
      Komprimiere Objekte: 100% (5/5), Fertig.
      Schreibe Objekte: 100% (6/6), 67.52 KiB | 0 bytes/s, Fertig.
      Total 6 (delta 3), reused 0 (delta 0)
      remote:
      remote: To create a merge request for rc-its, visit:
      remote:   https://g.........%5D=rc-its
      remote:
      To git.......git
      d0f277c..593eef6  rc-its -> rc-its
    

    Jetzt wechseln wir wieder in den master

      git checkout master
      Zu Branch 'master' gewechselt
      Ihr Branch ist auf dem selben Stand wie 'origin/master'.
    

    Und sehen das originale Logo. Nun wollen wir die nächste Hauptänderung machen

       git:(master) find ./ -type f -exec sed -i -e 's/Behörden-IT-Sicherheitstraining/IT-Sicherheitstraining/g' {} \;
       git:(master) ✗ git commit * -m "Behörden-it-sicherheits... in IT-Sicherheitstraining geändert"
       git:(master) git push     
    

    Der Branchwechsel

          git:(master) git checkout rc-its
          Zu Branch 'rc-its' gewechselt
          Ihr Branch ist auf dem selben Stand wie 'origin/rc-its'.
          ➜  ...... git:(rc-its)
    

    Die Webseite hat noch das Kundenlogo und den alten Titel

     git:(rc-its) git merge master
    

    TATATAA: Die Webseite hat das Kundenlogo und neuen Titel

    23.3.19
    Weitere Beiträge zu: asciidoctor

    Unisex-Toiletten wie es nicht sein sollte

    Also das finde ich ein wenig unpassend wie die Uni in Chemnitz die Toilettennutzung regelt. Wenn schon Allgender Toiletten dann aber auch bitte für Männlein und Weiblein.

    So ist das kein guter Beitrag für den Kampf um Gleichberechtigung.

    21.3.19
    Weitere Beiträge zu: Gleichberechtigung

    Chemnitzer Linux Tag 2019

    Leider etwas früh muss ich dieses Jahr die Chemnitzer Linux Tage schon gegen Mittag verlassen. Wie auch schon das letzte Jahr eine sehr gelungene Veranstaltung. Für mich wäre die Veranstaltung ohne einen eigenen Vortrag zu weit aber wenn man “in der Nähe” wohnt auf jeden Fall einen Besuch wert.

    Zu meiner Überraschung wurden im Auswahlverfahren beide meiner Vortragvorschläge angenommen und auf den Sonntag morgen gelegt. Es ging um DSGVO IT Sicherheitsdokumentation mit Verinice und Backups im Netzwerk mit restic.

    Es war ein wenig anstrengend aber hat wieder viel Spass gemacht.


    17.3.19
    Weitere Beiträge zu: Konferenzen ChemnitzerLinuxTage

    Friday for Future

    Hier werden gerade Plakate für FridaysForFuture gemalt.

    Und ansonsten habe ich diesem Tweet nichts hinzuzufügen

    14.3.19
    Weitere Beiträge zu: FridayForFuture

    Asciidoctor: Texte mit Bedingungen

    Asciidoctor ist inzwischen mein Standardwerkzeug wenn es um Dokumentationen geht.

    Was mir bisher immer Kopfzerbrechen bereitet hat ist das man interne Dokumentationsanteile von den “Kundendokumentationen” getrennt aufbereitet muss.

    Bei Asciidoctor kann man Texte in Abhängigkeit von Variablen einbinden. Zum Beispiel so

      ifdef::internal[]
      include::internal-intro.adoc[]
      endif::internal[]
    

    Und dann kann man durch

      asciidoctor-pdf index.adoc -a internal=1
    

    ein PDF erstelle das die internen Anteile dabei hat und mit

      asciidoctor-pdf index.adoc
    

    das externe Dokument erstellen. Und man kann beide Informationsarten in einem Dokument zusammenpflegen.

    8.3.19
    Weitere Beiträge zu: asciidoctor

    Windows Virtualbox VMs in Proxmox

    Microsoft bietet auf dieser Seite virtuelle Maschinen von Windows 7 und Windows 10 mit verschiedenen IE und Edge Browserversionen zum testen der Browser an. Leider ist dort keine Format für Proxmox enthalten. Auf Basis dieser und dieses Dokumentes konnte ich ein VirtualBox Image importieren. Hier meine Notizen (wie immer Use at your own risk)

    Image auf den Server kopieren, einloggen und auspacken

       scp -P 22 IE11.Win7.VirtualBox.zip root@proxmox-server.ip:/root
       ssh proxmoxhos-server.ip
       unzip IE11.Win7.VirtualBox.zip
    

    Wenn ich das richtig verstanden habe ist diese ausgepackte ova Datei ein Tarfile aus “Hardwarebeschreibung” und “Festplatte”. Also auspacken

      tar -xf IE11\ -\ Win7.ova
    

    Aus der “PC” Beschreibung kann man erkennen wir groß diese Platte ist

      <Info>List of the virtual disks used in the package</Info>
        <Disk ovf:capacity="42949672960" ovf:diskId="vmdisk1" ovf:fileRef="file1" ovf:format="http://www.vmware.com/interfaces/specifications/vmdk.html#strea
      mOptimized" vbox:uuid="c523f6ad-edc8-4652-8f86-959e366ab2ac"/>
    

    Also: 42949672960 byte = 42,94967296 GB

    In Proxmox haben ich dann eine neue VM eingerichtet mit einer Festplatte dieser Größe. Die VM hatte die ID 110. Dann musste ich herausfinden wo die Festplatte von diesem neuen Rechner liegt:

        more /etc/pve/nodes/proxmoxserver/qemu-server/110.conf
        bootdisk: ide0
        cores: 1
        ide0: local-lvm:vm-110-disk-1,size=43G
        ide2: none,media=cdrom
        memory: 4512
        net0: e1000=8A:63:4A:B8:74:9B,bridge=vmbr0
        numa: 0
        ostype: win10
        scsihw: virtio-scsi-pci
        smbios1: uuid=a0f26105-45f5-4b0f-acf7-ee1cca4f1ec0
    

    Das mit den Logischen Volumes habe ich nicht zu Ende verstanden aber so bekommt man den Dateinamen

         lvdisplay
        .....
        .....
        --- Logical volume ---
          LV Path                /dev/pve/vm-109-disk-1
          LV Name                vm-109-disk-1
    

    Jetzt überschreibe ich den dort angegebenen Namen mit der konvertierten Version meines Images von Microsoft.

        qemu-img convert -p -f vmdk IE11\ -\ Win7-disk001.vmdk -O raw /dev/pve/vm-110-disk-1
    

    Und dann konnte ich in das Windows 7 Image booten und es sieht gut aus.

    7.3.19
    Weitere Beiträge zu: Grunt Bootstrap

    Bootstrap mit sass und grunt

    Für unseren Webshop möchte ich langfristig auf eine neue Bootstrapversion umstellen und ein neues Template bauen. Ich arbeite zwar schon länger mit Grunt aber nur in Teilbereichen. Für die neuen Projekte möchte ich das mit npm noch etwas besser automatisieren. Vor allem das manuelle Downloaden und Anpassen der Abhängigkeiten soll entfallen.

    Basis für meine Notizen sind dieses und dieses Dokument und wie immer gilt. Das sind meine Notizen und kein Bulletproof Tutorial

    Wir starten also im Rootverzeichnis des Webprojekt und initialisieren unseren npm

    npm init vi package.json “dependencies”: { “bootstrap”: “^4.2.1”, “jquery”: “^3.3.1”, “popper.js”: “^1.14.6” }

    Damit haben wir eine Art “Inhaltsverzeichnis” eröffnet auf dessen Basis der npm Packete installiert. Jetzt kann ich einfach Boostrap mit allen Abhängigkeiten installieren.

      npm install       
      shop-rusticus-template@1.0.0 /home/hbauer/Dokumente/rusticus/shop/shoproot/templates/tpl_modified
      ├── bootstrap@4.3.1
      ├── jquery@3.3.1
      └── popper.js@1.14.7
    
      ls node_modules
      bootstrap  jquery  popper.js
    

    Zu Beginn brauche ich erst mal nur die Werkzeuge die ich zum zusammenstellen der Bootstrap CSS Dateien aus den sass Quellen benötige.

     sudo npm install grunt -save-dev
     sudo npm install grunt-contrib-sass -save-dev
     sudo npm install grunt-contrib-watch -save-dev
    

    Dann erstelle ich die Steuerungsdatei für Grunt. Hier werden erst einmal nur die saas Elemente eingebaut und getestet. Die anderen Grunt Funktionen übernehme ich von meinen alten Beispielen. Hier geht es mir vor allem um das Zusammenspiel der Bootstrap Elemente die über npm installiert werden und meine eigenen Notwendigen Anpassungen.

       module.exports = function(grunt) {
           grunt.initConfig({
               sass: {
                   dev: {
                       options: { style: 'expanded',
                                 loadPath: ['node_modules/bootstrap/scss','sass']},  //Wichtig
                       files: { 'mystyle.css': 'sass/mystyle.scss' }
                       },
                   dist: {
                       options: { style: 'compressed',
                           loadPath: 'node_modules/bootstrap/scss' },
                       files: {
                           'mystyle.css': 'sass/mystyle.scss' }
                   }
               },
               watch: {
                   sass: {
                       files: 'sass/*.scss',
                       tasks: ['sass:dev']  } }
           });
           grunt.loadNpmTasks('grunt-contrib-sass');
           grunt.loadNpmTasks('grunt-contrib-watch');
           grunt.registerTask('buildcss', ['sass:dist']);
           grunt.registerTask('devcss', ['sass:dev']);
       };
    

    Im Verzeichniss sass/ möchte ich alle meine Anpassungen halten. Dazu zählen die Anpassungen in den Variablen und gegebenenfalls eine reduziete bootstrap.scss aus der nicht gewünschte Elemente auskommentiert worden sind. Wichtig ist das wir das !default am ende entfernen (Die Änderung in der _bootstrap_variables_override ist nur ein Testbeispiel um zu sehen das es geht. )

     mkdir sass
     vi _bootstrap-variables-override
        $headings-font-weight: 1800;
    
     vi sass/mystyle.scss
         @import "bootstrap-variables-override";
         @import "functions";
         @import "variables";
         @import "mixins";
         @import "root";
         @import "reboot";
         @import "type";
         @import "images";
         @import "code";
         @import "grid";
         @import "tables";
         @import "forms";
         @import "buttons";
         @import "transitions";
         //@import "dropdown";
         @import "button-group";
         @import "input-group";
         @import "custom-forms";
         ....
         ...
    

    Jetzt mal starten und dann schauen wir ob die geänderte Schriftform für die Überschriften im CSS ankommt.

       grunt sass:dev                            
       Running "sass:dev" (sass) task
    
       Done.
    
       grep -b3 h1 mystyle.css
    
            .h1, .h2, .h3, .h4, .h5, .h6 {
              margin-bottom: 0.5rem;
              font-weight: 1800;
              line-height: 1.2;
            }
    

    Jetzt kann ich mit einem Werkzeug (npm) sowohl meine Gruntkomponenten als auch meine Abhängigkeiten installieren, updaten und dann direkt meine produktiven Dateien bauen. In meiner Versionskontrolle brauche ich nur die Dateien

    • Gruntfile.js
    • package.json
    • sass/*

    zu halten.

    2.3.19
    Weitere Beiträge zu: Grunt Bootstrap

    Debian: sudo unable to stat /etc/sudoers Permission denied

    Bei Debian 9 auf dem Alix Rechner habe ich heute nach der Installation von sudo die folgende Fehlermeldung beobachtet.

     sudo su -
     sudo: unable to stat /etc/sudoers: Permission denied
     sudo: no valid sudoers sources found, quitting
     sudo: unable to initialize policy plugin
    

    Nach einem Hinweis von hier ging es dann nach folgendem Befehl

     ls -ld /
     drwxr--r-- 21 hbauer hbauer 4096 Jan 26 10:38 /
     chmod 755 /
     ls -ld /
     drwxr-xr-x 21 hbauer hbauer 4096 Jan 26 10:38 /
     sudo su -
    

    Offensichtlich sind bei der Installation über den oben genannten Weg die Root Rechte etwas falsch gelaufen.

    25.2.19
    Weitere Beiträge zu: sudo debian

    Topfsecret beginnt zu wirken

    Wenn schon 2 Wochen nach Beginn der Initiative TopfSecret die ersten Verbandsvertreter ein Verbot fordern dann sind wir auf dem richtigen Weg.

    Der Geschäftsführer des Hotel- und Gastronomieverbands Hessen sagt in der FAZ: wir Bürger sind zu doof die Berichte zu verstehen:

    Die Prüfberichte der Lebensmittelkontrolleure sind nicht dazu gedacht, öffentlich gemacht zu werden. Deshalb sind sie nicht in einer Sprache verfasst, die auf uns Verbraucher zugeschnitten ist. Sie geben uns keine Informationen an die Hand, aufgrund derer wir einschätzen könnten, wie es um die Hygiene in einem Betrieb wirklich bestellt ist.

    Und der Bund für Lebensmittelrecht und Lebensmittelkunde e. V. fordert

    Individuell beantragte Behördenauskünfte nach VIG und behördliche Veröffentlichungen im Internet sollten strikt unterschieden werden. Der Gesetzgeber sollte diese Unterscheidung dringend im Wortlaut des VIG klarstellen

    Man ist übrigens verpflichtet seiner Weitergabe des Namens an den betroffenen Betrieb zuzustimmen. Was an sich auch schon ein Unding ist. Wenn ich als Bürger eine berechtigte Auskunft verlange warum muss der Staat das in der Welt bekanntgeben dürfen.

    Also: Weitere Anfragen stellen Erst wenn es weniger Aufwand ist die Berichte direkt zu veröffentlichen als individuelle Anfragen zu beantworten wird sich daran etwas ändern das mit unserem Steuergeldern erstellte Gutachten vor uns geheim gehalten werden.

    24.2.19

    Amazon: Festplattenversand per Papiertüte

    Ich bin ja auch sehr stark für das Sparen von Verpackungsmaterial.

    Aber eine 2TB HDD Festplatte verschickt man nicht einfach in einer Papiertüte.

    Amazon Festplatte mit Papiertüte versendet

    Der Ersatz kam auch vernünftig verpackt in einem Pappkarton mit Luftpolsterfolie

    22.2.19
    Weitere Beiträge zu: Amazon

    modified Shop: zusätzliche Variablen anzeigen

    In einem modified Webshop soll die Möglichkeit eingerichtet werden eine zusätzliche Variable für einen Kategorie einzugeben und im Frontendtemplate zu verwenden. Basis für die Vorgehensweise war dieses etwas veraltete Dokument und ein gutes Stück Hilfe von dem Forenmitglied awids.

    Die hier vorgestellte Vorgehensweise müsste updatesicher sein.

    Zuerst müssen wir die Datenbank darauf vorbereiten ein neues Feld in den Kategorie Definitionen zu erhalten

    mysql -u root -p
    use shop;
    ALTER TABLE `categories`  ADD `categories_youtube` VARCHAR( 30 ) NOT NULL;
    

    Dann brauchen wir die notwendigen Anpassungen für den Adminbereich

    1. Ein Feld in das wir die Werte eingeben könnten

      vi admin/includes/extra/modules/new_category/my-categories-youtube.php
       <table class="tableInput border0">
       <tr>
       <td><span class="main">youtubeid</span></td>
       <td><span class="main"><?php echo  xtc_draw_input_field('categories_youtube', $cInfo->categories_youtube); ?></span></td>
       </tr>
       </table>
      
    2. Die Definition das dieses Feld auch abgespeichert und wieder “ausgegraben wird “

      vi admin/includes/extra/modules/add_db_fields/my-categories-youtube.php

    3. Die Variable soll aus der Datenbank geholt werden

    Jetzt müssen wir dafür sorgen das wir diese Daten auch in einem Frontendtemplate verwenden können

      vi includes/extra/define_add_select/my-categories-youtube.php
         <?php $add_select_categories[] = 'c.categories_youtube'; ?>
    
    1. Dieser Wert wird einer Smarty Variable zugewiesen

      vi includes/extra/modules/categories_listing/categories_smarty/my-categorie-youtube.php assign('CATEGORIES_YOUTUBE', $category['categories_youtube']); ?>

    Jetzt kann man die Variable in einem product_listing verwenden und damit die gewünschten Dinge machen.

    Ob es klappt kann man dann in der Datenbank nachschauen

      select categories_id,categories_youtube from categories where categories_youtube != ' ';
      +---------------+--------------------+
      | categories_id | categories_youtube |
      +---------------+--------------------+
      |           27  | XRXXXXXXvF4        |
      |           31  | EXXXXXXXmDY        |
      +---------------+--------------------+
      2 rows in set (0.00 sec)
    
    18.2.19
    Weitere Beiträge zu: modified

Dies ist ein privater Blog von Hagen Bauer- berufstätiger Vater, Ehemann, Naturliebhaber, Läufer, Zelter, technikverliebt.


Creative Commons License
This blog is licensed under a Creative Commons License