Git – система контролю версій файлів

Система контролю версій файлів Git з вільним і відкритим первописом коду, призначена для обробки всього, від дрібних до дуже великих проектів з високою швидкістю і ефективністю. Відрізняється від інших систем надзвичайною гнучкістю. В Git однаково добре реалізовано як управління локальними версіями файлів, так і доступ до віддалених репозитаріїв.

Довго перепоною для використання системи контролю версій для мене було небажання змінювати звичні методи роботи.

Netbeans зберігає історію файлів, має зручний і гарний інтерфейс для аналізу цієї історії. Збереження давніших версій файлів забезпечує регулярне архівування проекту. Щоб проаналізувати зміни у версіях файлів є безліч утиліт для командного рядка diff GNU Diffutils або із графічним інтерфейсом KDiff3, Kompare.

Але бажання спробувати щось новеньке перемогло.

# для початку необхідно встановити програму, це просто

apt-get install git git-gui git-doc qgit

# або просто

apt-get install git

# потім переходимо до теки з проектом і виконуємо наступну команду

# ініціалізувати локальний репозитарій Git

git init

# додати до репозитарію всі файли проекту

git add -Af

# зберегти початкову версію файлів

git commit -am 'init'

# якщо немає необхідності докладно описувати виконані зміни то в якості коментаря можна використати поточну дату

git add -A
git commit -m "\"$(date)\""

# створити нову гілку

git branch testing

# перейти до вказаної гілки

git checkout testing

# перейти до головної гілки

git checkout master

#

# у процесі використання системи виникає необхідність стиснення бази git

#

# визначення об’єму зайнятого проектом (до стиснення)

user@host:~/storage/project/dbdesc$ du -s .
487406 .
# визначення об’єму зайнятого базою git (до стиснення)
user@host:~/storage/project/dbdesc$ du -s .git
300141 .git
# виконання стиснення бази git
user@host:~/storage/project/dbdesc$ git gc
Counting objects: 21261, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (6303/6303), done.
Writing objects: 100% (21261/21261), done.
Total 21261 (delta 15271), reused 19994 (delta 14721)
Removing duplicate objects: 100% (256/256), done.
# визначення об’єму зайнятого проектом (після стиснення)
user@host:~/storage/project/dbdesc$ du -s .
257657 .
# визначення об’єму зайнятого базою git (після стиснення)
user@host:~/storage/project/dbdesc$ du -s .git
70392 .git
user@host:~/storage/project/dbdesc$

Git збегігає файли у стисненому вигляді, контролює наявність дублювання файлів і до цього всього в Netbeans реалізовано підтримку репозитаріїв Git.

 

Advertisements

Поєднання зручності візуального проектування та динамічного оновлення даних JTable

Поєднання зручності візуального проектування та динамічного оновлення даних JTable.

Проектування візуальних форм із застосуванням NetBeans IDE має безліч переваг над “ручним” кодуванням. Але іноді виникають ситуації коли доводиться шукати компроміс між гнучкістю “ручного” кодування та швидкістю і зручністю застосування IDE.

Ось приклад:

  • створюємо в NetBeans IDE форму (на приклад JFrame),
    • додаємо на форму компонет таблицю (JTable),
      • потім заповнюємо модель таблиці:
        • додаємо необхідну кількість колонок,
        • підписуємо заголовки,
        • встановлюємо ширину,
        • типи даних.
  • створюємо в NetBeans IDE форму (на приклад JFrame)

jframe

  • додаємо на форму компонет таблицю (JTable)

  • потім заповнюємо модель таблиці

  • додаємо необхідну кількість колонок

  • підписуємо заголовки

  • встановлюємо ширину

  • типи даних

В редакторі форм зробити це все можна швидко і просто, але якщо необхідно в процесі роботи програми поновити дані в таблиці тут виникають деякі питання. Застосовуючи “ручне” кодування ми б використовували для формування моделі масиви із назвами колонок та іншою необхідною інформацією, а для оновлення таблиці на основі цих масивів завжди можна сформувати нову модель даних DefaultTableModel tm = new DefaultTableModel(Object[][] data, Object[] columnNames).

У випадку створення форми в NetBeans IDE модель таблиці буде описана в процедурі initComponents() і масиви цієї моделі не іменовані. Доступ до них є але код, як на мене, надто громіздкий, не прозорий, а деякі масиви доводиться дублювати.

Тому я використовую наступні методи:

1.

...
// спорожнити таблицю (знищити тільки дані)
DefaultTableModel tm = (DefaultTableModel) jTable1.getModel();
tm.getDataVector().clear();
...

2.

...
// заповнити таблицю інформацією із бази даних
int cc = tm.getColumnCount();
while (rs.next()) {
  Object r[] = new Object[cc];
  for (int c = 0; c < rs.getMetaData().getColumnCount(); c++) {
    r[c] = rs.getString(c+1);
  }
  tm.addRow(r);
}
...

3.

// вставити запис і перейти до цього нового запису
...
tm.insertRow(0, new Object[сс]);
jTable1.setRowSelectionInterval(0, 0);
jScrollPane1.getVerticalScrollBar().setValue(0);
...

Це дає можливість поєднання зручності візуального проектування та динамічного оновлення даних.

=-=-=-=-=
Powered by Blogilo

Помилка “Duplicate class: pkgname.ClassName” в NetBeans

Повідомлення про помилку “Duplicate class: pkgname.ClassName” в NetBeans і її вирішення.

У одному з проектів NetBeans я необережно перейменував файл класу і після цього він повідомив мені “Duplicate class: pkgname.ClassName”.

Щоб вирішити проблему знищував файл класу і за допомогою рефакторингу NetBeans, і за допомогою файлового менеджера, та все марно.

Коли я створював файл, який так необережно перейменував, NetBeans повідомляв про ту ж саму помилку.

Вирішення виявилося простим, необхідно вийти з NetBeans і знищити теку cache із всім її вмістом.

Зробити це можна в консолі за допомогою команди:

user@host:~$ rm -R ~/.netbeans/7._/var/cache

або скористатися файловим менеджером.

=-=-=-=-=
Powered by Blogilo

Номер версії додатку скомпільованого в Netbeans

Давно шукав метод генерування порядкового номеру побудови jar-файлу скомпільованому в Netbeans.

Наведений фрагмент коду з build.xml, показує можливий шлях налаштування проекту в Netbeans. Код генерує наступний номер версії для jar-файлу. Поточна версія проекту зберігається у файлі version.properties. Крім порядкового номеру побудови jar-файлу "Application.buildnumber", сценарій додає у файлі version.properties інформацію про час компілювання "Application.builddate" та логін розробника "Application.builder". Крім того можна додати інформацію про версію додатку "Application.cvsversion", але метод її формування специфічний для кожної CVS.

У файл build.xml проекту створеному в Netbeans після рядка:

    <import file="nbproject/build-impl.xml"/>

Необхідно додати наступний код:

    <tstamp>
      <!-- ініціалізую змінну "builddate" -->
      <format property="builddate" pattern="dd.MM.yyyy HH:mm:ss" timezone="EET"/>
    </tstamp>
    <!-- ініціалізую змінну "whoami" -->
    <exec executable="whoami" outputproperty="whoami"/>
    <!-- exec executable="cvsversion-sh" outputproperty="cvsversion"/ -->
    <!-- target name="-post-jar" description="Sets the buildversion for the current build" -->
    <target name="-pre-compile" description="Sets the buildversion for the current build">
      <propertyfile file="${src.dir}/resources/version.properties">
        <!-- заповнюю значення номеру та дати компілювання додатку -->
        <entry key="Application.builddate" value="${builddate}" type="string"/>
        <entry key="Application.builder" value="${whoami}" type="string"/>
        <!-- entry key="Application.cvsversion" value="1.0.0.82" type="string"/ -->
        <entry key="Application.buildnumber" value="1" type="int" operation="+"/>
      </propertyfile>
    </target>

Інформація із файлу version.properties може бути використана в діалозі "Про додаток".

public class AboutBox extends javax.swing.JDialog {
...
      ClassLoader loader = ClassLoader.getSystemClassLoader();
      InputStream in = loader.getResourceAsStream("resources/version.properties");
      Properties v = new Properties();
      try {
        v.load(in);
      } catch (IOException ex) {
        Logger.getLogger(AboutBox.class.getName()).log(Level.SEVERE, null, ex);
      }
      String buildnumber = v.getProperty("Application.buildnumber");
      String builddate = v.getProperty("Application.builddate");
      StringBuilder sb = new StringBuilder();
      sb.append("<html><center>");
      sb.append("Версія: ");
      sb.append(version);
      sb.append("(");
      sb.append(buildnumber);
      sb.append(")<br>Cкомпільовано: ");
      sb.append(builddate);
      sb.append("</html>");
      jLabel1.setText(sb.toString());
...
}