Tuesday, August 16, 2016

Linux Introduction


What is Linux?

Linux is, in simplest terms, an operating system. It is the software on a computer that enables applications and the computer operator to access the devices on the computer to perform desired functions.

The operating system (OS) relays instructions from an application to, for instance, the computer’s processor.

The processor performs the instructed task, then sends the results back to the application via the operating system.

What is Kernel mean?

In computing, the kernel is the central component of OS.

It is a bridge between applications and the actual data processing done at the hardware level.

The kernel’s responsibilities include managing the system’s resources (the communication between hardware and software components).



What is CPU ?

It runs the Operating System and applications, constantly reviving input from the user or active software programs.

It processes the data and produces output, which may stored by an application or displayed on the screen.

Here are some CPU types:

  • INTEL (x86)
  • SPARC  (SUN / Oralce)
  • POWER  (IBM)
  • AMD

How CPU speed measured?

Clock Speed

  • The most common measure of CPU speed is the clock speed, which is measured in MHz or GHz. One GHz equals 1,000 MHz, so a speed of 2.4 GHz could also be expressed as 2,400 MHz. The higher the clock speed, the more operations the CPU can execute per second.
  • It’s important to realize that the clock speed of a CPU is not the only factor determining performance. Because of differences in chip architecture, one processor may be able to perform more operations than another over one cycle. Therefore, even if the first processor has a lower clock speed than the second, it may actually be faster.

Multi-Core Technology

  • Some processors are “dual core” or “quad core.” These terms indicate the use of multiple CPUs on a single circuit. The idea behind this concept is to improve processing speed by using two or more processors that can run independently or coop

Lets talk about Memory

Computer memory is any physical device capable of storing information temporarily or permanently. For example, Random Access Memory (RAM) is a volatile memory that stores information on an integrated circuit  used by the Operating System, application and hardware.

Front Side Bus and Cache


  • With any processor, the cache and front side bus play an important role in speed. The CPU and front side bus work together, so they should ideally run at the same speed so that one cannot slow the other down.
  • The cache also plays an important role in processor speed. The cache is memory that is accessed by the CPU to aid in completing certain routine tasks faster, so the larger the cache, the greater the CPU performance.

Volatile vs. non-volatile memory

Memory can be either volatile and non-volatile memory.

Volatile memory is memory that loses its contents when the computer or hardware device loses power.

Computer RAM is an example of a volatile memory and is why if your computer freezes or reboots when working on a program, you lose anything that hasn’t been saved.

Non-volatile memory, sometimes abbreviated as NVRAM, is memory that keeps its contents even if the power is lost. EPROM is an example of a non-volatile memory.

Remember Memory is not a Storage Disk

It is very common for new computer users to be confused by what parts in the computer are memory. Although both the hard drive and RAM are memory, it is more appropriate to refer to RAM as “memory”   and a hard drive as storage.

When a program such as your Internet browser is open, it is loaded from your hard drive and placed into RAM, which allows that program to communicate with the processor at higher speeds. Anything you save to your computer, such as a picture or video, is sent to your hard drive for storage.

UNIX Principles

  • Everything in UNIX is a file (including hardware)
  • Small, single purpose programs
  • Ability to chain programs together to perform complex tasks
  • Configuration data stored in text

Logging in to LINUX system

  • Two types of login screens available
  • Virtual consoles (Text based) & Graphical logins (display managers)
  • RHEL use GNOME/KDE display manager
  • Run-level-3 is a text based & Run-level-5 is Graphical based.
  • Up-to 6 virtual consoles & one graphical console
  • Switch among the virtual consoles ( Ctrl-Alt-F[1-6])
  • Access the graphical console by typing Ctrl-Alt-F7

Super User here is ROOT user

  • Special administrative account
  • Also called super user
  • Root has complete control over system
  • SU creates new shell as root
  • SUDO commands runs command as root
  • <id> command shows who you are?

Important Directories you must know

  1. Home Directory           –    /root , /home/<username>
  2. User Executable         –    /bin, /usr/bin,/usr/local/bin
  3. System Executable     –    /sbin, /usr/sbin, /usr/local/sbin
  4. Other mounts              –    /media , /mnt
  5. Configuration              –    /etc
  6. Temporary files           –    /tmp
  7. Kernels & boot loader  –  /boot
  8. Server Data                 –  /var , /srv
  9. System information     –  /proc, /sys
  10. Shared libraries           –  /lib,/usr/lib, /usr/local/lib

Learn about RUN Levels in LINUX

  • A run-level is a system state that is defined by the services listed in /etc/rc.d.
  • Configuration file to update run-level
  • $ vi /etc/inittab à update line “ id:3:initdefault:
  • To check which run level your are now $ who -r
  • You can change the run level just by typing # init0 or init6 # init 5
LEVEL
NAMEDESCRIPTION
0
HaltImmediately shuts down system and powers it off, if it can
1
Single userBrings system to a bare essentials mode for maintenance
2
User-definedCustom
3
Multi-user with console onlyAll services are running but X11
4
User-definedCustom
5
Multi-user with display and consoleAll services are running including X11 (or GUI)
6
RebootReboots the machine

What is Open source Linux?

  • Software & Source code available to all
  • Freedom to distribute software and source code
  • Ability to modify and create derived works
  • Integrity of author’s code

FEDORA Project  (Open Source)

  • community support
  • Personal systems

RHEL (Red Hat Enterprise Linux)

  • Stable, thoroughly tested software
  • Professional support servers
  • Centralized Management tools for large networks

Saturday, June 20, 2015

How To Install JAVA on Linux Platform


Installation of the 64-bit JDK on Linux Platforms

This procedure installs the Java Development Kit (JDK) for 64-bit Linux, using an archive binary file (.tar.gz).
These instructions use the following file:
jdk-8uversion-linux-x64.tar.gz
  1. Download the file.
    Before the file can be downloaded, you must accept the license agreement. The archive binary can be installed by anyone (not only root users), in any location that you can write to. However, only the root user can install the JDK into the system location.
  2. Change directory to the location where you would like the JDK to be installed, then move the .tar.gz archive binary to the current directory.
  3. Unpack the tarball and install the JDK.
    % tar zxvf jdk-8uversion-linux-x64.tar.gz
    
    The Java Development Kit files are installed in a directory called jdk1.8.0_version in the current directory.
  4. Delete the .tar.gz file if you want to save disk space.

Installation of the 64-bit JDK on RPM-based Linux Platforms

This procedure installs the Java Development Kit (JDK) for 64-bit RPM-based Linux platforms, such as Red Hat and SuSE, using an RPM binary file (.rpm) in the system location. You must be root to perform this installation.
These instructions use the following file:
jdk-8uversion-linux-x64.rpm
  1. Download the file.
    Before the file can be downloaded, you must accept the license agreement.
  2. Become root by running su and entering the super-user password.
  3. Uninstall any earlier installations of the JDK packages.
    # rpm -e package_name
    
  4. Install the package.
    # rpm -ivh jdk-8uversion-linux-x64.rpm
    
    To upgrade a package:
    # rpm -Uvh jdk-8uversion-linux-x64.rpm
    
  5. Delete the .rpm file if you want to save disk space.
  6. Exit the root shell. No need to reboot.
Starting with version 8u40, the JDK installation is integrated with the alternatives framework and after installation, the alternatives framework is updated to reflect the binaries from the recently installed JDK. Java commands such as javajavac,javadoc, and javap can be invoked from the command line.
Using the java -version command, users can confirm the default (recently installed) JDK version.
In addition, users can now check which specific RPM package provides the java files:
rpm -q --whatprovides java

Installation of the 32-bit JDK on Linux Platforms

This procedure installs the Java Development Kit (JDK) for 32-bit Linux, using an archive binary file (.tar.gz).
These instructions use the following file:
jdk-8uversion-linux-i586.tar.gz
  1. Download the file.
    Before the file can be downloaded, you must accept the license agreement. The archive binary can be installed by anyone (not only root users), in any location that you can write to. However, only the root user can install the JDK into the system location.
  2. Change directory to the location where you would like the JDK to be installed, then move the .tar.gz archive binary to the current directory.
  3. Unpack the tarball and install the JDK.
    % tar zxvf jdk-8uversion-linux-i586.tar.gz
    
    The Java Development Kit files are installed in a directory called jdk1.8.0_version in the current directory.
  4. Delete the .tar.gz file if you want to save disk space.

Installation of the 32-bit JDK on RPM-based Linux Platforms

This procedure installs the Java Development Kit (JDK) for 32-bit RPM-based Linux platforms, such as Red Hat and SuSE, using an RPM binary file (.rpm) in the system location. You must be root to perform this installation.
These instructions use the following file:
jdk-8uversion-linux-i586.rpm
  1. Download the file.
    Before the file can be downloaded, you must accept the license agreement.
  2. Become root by running su and entering the super-user password.
  3. 3. Uninstall any earlier installations of the JDK packages.
    # rpm -e package_name
    
  4. Install the package.
    # rpm -ivh jdk-8uversion-linux-i586.rpm
    
    To upgrade a package:
    # rpm -Uvh jdk-8uversion-linux-i586.rpm
    
  5. Exit the root shell. No need to reboot.
  6. 5. Delete the .rpm file if you want to save disk space.

Friday, June 12, 2015

How to install apache tomcat as daemon service in Linux environment

Open the terminal and type the below command.
sudo nano /etc/init.d/tomcat

Paste the below script and save the file.

#!/bin/bash
#
# Author : Sree Choudary
# Copyright (c) 2k15
#
# Make kill the tomcat process
#
TOMCAT_HOME=/usr/local/tomcat/apache-tomcat-8.0.23
SHUTDOWN_WAIT=5

tomcat_pid() {
  echo `ps aux | grep org.apache.catalina.startup.Bootstrap | grep -v grep | awk '{ print $2 }'`
}

start() {
  pid=$(tomcat_pid)
  if [ -n "$pid" ] 
  then
    echo "Tomcat is already running (pid: $pid)"
  else
    # Start tomcat
    echo "Starting tomcat"
    /bin/sh $TOMCAT_HOME/bin/startup.sh
  fi

  return 0
}

stop() {
  pid=$(tomcat_pid)
  if [ -n "$pid" ]
  then
    echo "Stoping Tomcat"
    /bin/sh $TOMCAT_HOME/bin/shutdown.sh

    let kwait=$SHUTDOWN_WAIT
    count=0;
    until [ `ps -p $pid | grep -c $pid` = '0' ] || [ $count -gt $kwait ]
    do
      echo -n -e "\nwaiting for processes to exit";
      sleep 1
      let count=$count+1;
    done

    if [ $count -gt $kwait ]; then
      echo -n -e "\nkilling processes which didn't stop after $SHUTDOWN_WAIT seconds"
      kill -9 $pid
      echo  " \nprocess killed manually"
    fi
  else
    echo "Tomcat is not running"
  fi

  return 0
}
pid=$(tomcat_pid)

 if [ -n "$pid" ]
  then
    echo "Tomcat is running with pid: $pid"
    stop
  else
    echo "Tomcat is not running"
    start
  fi
exit 0

sudo chmod 755 /etc/init.d/tomcat
update-rc.d tomcat defaults

Finally you can start and stop tomcat using below commands.

service tomcat start
service tomcat stop

Tuesday, February 4, 2014

Migration Upgrade from TFS 2012 to TFS 2013 (With Reporting and SharePoint)

This blog gives you the step by step actions required for the Migration upgrade from Team Foundation Server 2012 to 2013.
> Prerequisites: (IMPORTANT)
Make sure you have appropriate accounts with permissions for SQL, SharePoint, TFS and Machine level Admin privileges on both the servers.
  1. You must be an Administrator on the Server.
  2. The Account must have Sysadmin privilege in SQL Server.
  3. Must be a part of the Farm Administrator’s group in SharePoint.
A detailed information about this can be found here.
   Back up all the databases from TFS 2012.
Make sure you stop all TFS services, using the TFSServiceControl.exe quiesce command. More info here.
Databases to backup,
  1. The Configuration Database (For instance, Tfs_Configuration)
  2. The Collection Database(s) (For instance, Tfs_DefaultCollection)
  3. The Warehouse Database* (For instance, Tfs_Warehouse)
  4. The Analysis Database* (For instance, Tfs_Analysis)
  5. Report Server Databases* (For instance, ReportServer and ReportServerTempDB)
  6. SharePoint Content Databases** (For instance, WSS_Content)
* If you have configured Reporting in TFS 2012
** If you have configured SharePoint in TFS 2012
Also, you have to back up the Encryption keys of ReportServer database.
   In the new Server,
  1. Install the TFS2013 Binaries.
  2. Install SQL Server 2012 (Enterprise/Standard) with SP1
  3. For a step by step instructions on how to install SQL Server for TFS, refer here.
  4. Install a compatible version of SharePoint (Foundation/Standard/Enterprise) Note: Configuration fails with SQL Server 2012 RTM. You need SP1 update installed.
> Step 1: Restoring Databases.
On the new server, using the SQL Server Management Studio, Connect to the Database engine and restore all the databases (Configuration, Collection(s), SharePoint Content Warehouse and Reporting). Also, connect to the Analysis Engine and restore the Analysis Database.
clip_image002
If you have Reports configured and want to do the same in 2013, go to Step 2, else skip it.
> Step 2: Configure Reporting.
Open Reporting Services Configuration Manager,
clip_image004
Click on Database on the left pane and click on Change Database.
Choose an existing report server database and click on next.
clip_image006
Enter the credentials and click on next.
clip_image009
Select ReportServer database and continue to next. Review and complete the wizard.
clip_image011
Now, you’ll have to restore the Encryption key. To do that Click on Encryption Keys on the left pane and click on Restore.
Specify the file and enter the password you used to back up the encryption key and click on OK.
clip_image013
Go to Report Manager URL, and Click on the URLs to see if you are able to successfully browse through the reports.
clip_image015
> Step 3: Install and Configure SharePoint.
Install a compatible version of SharePoint and run the SharePoint Products Configuration Wizard.
To check compatible versions, refer to the Team Foundation Server 2013 Installation Guide, available here.
Click on Next.
clip_image017
Configuring a new farm would require reset of some services. Confirm by clicking on Yes.
clip_image019
Select Create a new server farm and click on Next.
clip_image021
Enter the Database Server and give a name for the configuration Database. Specify the service account that has the permissions to access that database server.
clip_image023
The recent versions of SharePoint would ask for a passphrase to secure the farm configuration data. Enter a passphrase.
clip_image025
Click on Specify Port Number and give “17012”. TFS usually uses this port for SharePoint. You can however give another unused port number too.
Select NTLM for default security settings.
clip_image027
Review and complete the configuration wizard.
clip_image029
Now that we’ve configured SharePoint, go to SharePoint Central Admin page, give the admin credentials and create a new web application for TFS. It will automatically create a new content database for you.
If you want to restore the content database from the previous version, say SharePoint 2010, youmust first upgrade the content database and attach it to the web application.
  • First, Click on Application Management -> Manage Content Databases.
    Select the web application you created for TFS and remove that content database.
  • Upgrade and Attach the old content database by using the Mount-SPContentDatabase. Example,
    Mount-SPContentDatabase “MyDatabase” -DatabaseServer "MyServer" -WebApplicationhttp://sitename (More information on that command, here.) 
> Step 4: Configure Team Foundation Server.
Once we’ve restored all the databases and the encryption key and/or configured reporting, we are all set to upgrade TFS to the latest version.
Start Team Foundation Administration Console and Click on Application tier.
clip_image031
Click on Configure Installed Features and choose Upgrade.
clip_image032
Enter the SQL Server/Instance name and Click on list available databases.
clip_image033
Confirm that you have taken backup and click on next (Yes, taking a backup is that important)
Choose the Account and Authentication Method.
clip_image034
Select the Configure Reporting for use with Team Foundation Server and click on next.
clip_image035
Note: If your earlier deployment was not using Reporting Service then you would not be able to add Reporting Service during the upgrade (this option would be disabled). You can configure Reporting Service with TFS later on after the upgrade is complete.
Give the Reporting Services Instance name and Click on Populate URLs to populate the Report Server and Report Manager URLs. Click on next.
clip_image036
Since we are configuring with Reports, we need to specify the Warehouse database. Enter the New SQL Instance that hosts the Warehouse database, do a Test and Click on List Available Databases. Select Tfs_Warehouse and click on Next.
clip_image037
In the next screen, Input the New Analysis Services Instance, do a Test and Click on Next.
Note: If you’ve restored the Analysis Database (Tfs_Analysis) from the previous instance, TFS will automatically identify and use the same.
clip_image038
Enter the Report Reader account Credentials, do a Test and click on Next.
clip_image039
Check Configure SharePoint Products for Use with Team Foundation Server. Click on Next.
Note: This is for Single Server Configuration, meaning SharePoint is installed on the same server as TFS.
clip_image040
Note: If your earlier deployment was not using SharePoint then you would not be able to add SharePoint during the upgrade (this option would be disabled). You can configure SharePoint with TFS later on after the upgrade is complete.
In this screen, make sure you point to the correct SharePoint farm. Click on Test to test out the connection to the server. In our case, this is a Single-Server deployment. We’ve configured SharePoint manually, and created a web application for TFS.
clip_image041
Make sure all the Readiness Checks are passed without any errors. Click on Configure.
clip_image042
Now, the basic TFS Configuration is completed successfully. Click on Next to initiate the Project Collection(s) upgrade.
clip_image043
That’s it. Project Collections are now upgraded and attached.
clip_image044
Click on next to review a summary and close this wizard.
clip_image045
We are almost done. Notice that in the summary of TFS Administration Console, we still see the old server URL.
This is very important.
We need to change this to reflect the new server using the Change URLs.
clip_image047
clip_image049
Do a test on both the URLs and Click on OK.
Now, try browsing the Notification URL to see if you are able to view the web access without any errors.
clip_image051
Next, Click on the Team Project Collections in the left pane, Select your Collection(s) and click on Team Projects. See if you have the projects listed.
clip_image053
Under SharePoint site, check if the URL points to the correct location, if not, Click on Edit Default Site Location and edit it.
clip_image055
See if the URL under Reports Folder points to the correct location, if not, Click on Edit Default Folder Location and edit it.
clip_image057
Next, Click on Reporting in the left pane and see if the configurations are saved and jobs are started.
clip_image059
> Step 5: Configuring Extensions for SharePoint (Only when SharePoint is on a different server)
If you’ve configured SharePoint on a different server, you need to add Extensions for SharePoint products manually.
First you need to install Remote SharePoint Extensions on the server available as part of the TFS installation media. Run the configuration wizard for Extensions for SharePoint. For a detailed blog on how to do that click here.
That’s it. With that TFS is configured correctly.
As a final step, install Team ExplorerConnect to the Team Foundation Server and create a new Team Project. See if it creates properly with Reports and a SharePoint site.
Now, your new TFS 2013 is up and running, with upgraded collections.

Wednesday, January 29, 2014

MySQL - Connect to your database remotely

This tutorial will walk you through setting up a user on your MySQL server to connect remotely.
The following items are assumed:
  • You have access to login as the 'root' MySQL user

Contents

Getting your IP address

You will need to know what the IP address you are connecting from. To find this you can go to one of the following sites:

Granting Access

Granting access to a user from a remote host is fairly simple and can be accomplished from just a few steps. First you will need to login to your MySQL server as the root user. You can do this by typing the following command:
# mysql -u root -p
This will prompt you for your MySQL root password.
Once you are logged into MySQL you need to issue the GRANT command that will enable access for your remote user. In this example we will be creating a brand new user (fooUser) that will have full access to the fooDatabase database.
Keep in mind that this statement is not complete and will need some items changed. Please change 1.2.3.4 to the IP address that we obtained above. You will also need to change my_password with the password that you would like to use for fooUser.
mysql> GRANT ALL ON fooDatabase.* TO fooUser@'1.2.3.4' IDENTIFIED BY 'my_password';
This statement will grant ALL permissions to the newly created user fooUser with a password of 'my_password' when they connect from the IP address 1.2.3.4.

Testing Remotely

Now you can test your connection remotely. You can access your MySQL server from another Linux server:
# mysql -u fooUser -p -h 44.55.66.77 Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 17 Server version: 5.0.45 Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> _
Note that the IP of our MySQL server is 44.55.66.77 in this example.

Notes

There are a few things to note when setting up these remote users:
  • When setting up users a local user is not the same thing as a remote user. For instance fooUser@localhost is not the same as fooUser@1.2.3.4. You will have to duplicate permissions if you want them to have the same permissions.
  • Granting ALL permissions is not advised. Using GRANT SELECT,INSERT,UPDATE,DELETE is a wise alternative for a normal user.
  • If you would like to grant only to a specific table you can use database.table instead of database.*. In respect to our example above you could put fooDatabase.fooTable.
  • If you are using iptables you will need to make an entry in your firewall for TCP port 3306. When creating your firewall rule you can simply use the name 'mysql' for the port number. Search our wiki for iptables and you will find a list of common rule sets which include an entry for MySQL.

Thursday, January 2, 2014

Why we require repo on top of git in development project.

When we talk about Android project, we get a picture of repository with lots of folder inside that. Android project is large, keeping all android OS file into one repository is inefficient and error prone. If repository got corrupted whole project will be in soup as well as all git operation will be very slow in one single repository. So android project has been divided into multiple git repositories. In git any repository is maintained by .git folder.
So android source is having multiple .git folders like below picture
Here bionic.git   is one repository containing file related to bionic.
kernel.git it containing kernel related files.
Other folder like device, framework etc will be having multiple repositories inside them.
Git command like git add git commit git push etc at a time work on one repository mean on one .git folder.  But a normal android mobile development project will be having almost 120 to 180 git repositories.
So question arise how to handle all 180 repositories. One way is ,go into all 180 repository manually perform our work; if we do like this our life will be miserable. So repo comes into picture.
So repo is a tool or set of scripts written in python to handle this situation. It has lot of command to make our life happy which are
1) repo init
2) repo sync
3) repo forall
4) repo prune
5) repo start
6) repo status
1) repo init:-

init

repo init -u url [options ]
Whenever we run repo init with some URL and option, it will create a .repo folder in your current directory. This .repo/ directory will contain Git repositories for our project; mean all .git repositories which I have mentioned above in projects folder.  The .repo/ directory also contain manifest.xml, which is a symlink to the selected manifest in the .repo/manifests/ directory.
This manifest file contain the info of your all repositories, there path in source etc.
It something looks like this
So <project name="platform/cts" path="android/cts" />
Tell us that there is a project platform/cts and it can be found at android/cts path in the source.
To get this .repo folder we have to run repo init command. So let run us  
 $ repo init -u git://android.git.kernel.org/platform/manifest.git
This command will create a .repo folder containing repo specific and project specific files in your current directory. Here -u argument specifies a URL from which to retrieve a manifest repository.
To specify a revision, which is, a particular manifest-branch, use the -b option. For example:
$ repo init -u git://android.git.kernel.org/platform/manifest.git -b release-1.0
here revision is a name of the Git branch the manifest wants to track for this project.
Note: For all remaining Repo commands, the current working directory must either be the parent directory of .repo/ or a subdirectory of the parent directory.

Sync

repo sync [ project-list ]

Using repo init we installed the repo and got the project specific info but till yet we have not synchronized with the remote repository mean; we have not downloaded the source code till yet. So repo sync downloads new changes and updates the working files in your local environment. After successful repo sync, the code in specified projects will be up to date with the code in the remote repository.
You can specify project-list as a list of names or a list of paths to local source directories for the projects:
   repo sync [proj1 proj2 ... projN]
Here proj1 might be kernel/lk or android/bootable/bootloader/lk

Like that we can define multiple project if want specific project files to sync with remote repository. Or give without any parameter if you want to sync files for all projects.
Generally Repo synchronization works like below
When we run repo sync,:
1.            If the project has never been synchronized, then repo sync is equivalent to git clone. All branches in the remote repository are copied to the local project directory.
2.            If the project has already been synchronized once, then repo sync is equivalent to:
git remote update
git rebase origin/branch
where branch is the currently checked-out branch in the local project directory. If the local branch is not tracking a branch in the remote repository, then no synchronization will occur for the project.
Mean if do repo sync in existing repo synced project it fetch the update from remote repository, then it rebase your current branch, here git remote update command is equivalent to git fetch. Basic difference between these two commands is:
git remote update fetch the update or new branch for all remote branches present in remote repository.
git fetch just fetch the changes for specified remote branch.
Sometime in git rebase operation results in merge conflicts, we need to use the normal Git commands (for example, git rebase --continue) to resolve those conflicts.
The repo sync command also updates the private repositories in the .repo/ directory.

start

repo start newbranchname [ project-list ]
when we do the repo sync , we got the copy of remote repository but branch of development is not specified till yet. Mean our commit will go to which branch is not specified or we are not on any branch till yet. So repo start command starts a new branch for development.
The project-list specifies which projects will participate in this topic branch. You can specify project-list as a list of names or a list of paths to local working directories for the projects:
repo start default [proj1 proj2 ... projN]
"." is a useful shorthand for the project in the current working directory.

status

repo status [project-list ]
Show the status of files with respect of current working directory, staging area and most recent commit on the branch (HEAD) in each project specified.
This command compares the working tree to the staging area (index) and the most recent commit on this branch (HEAD) in each project specified. Displays a summary line for each file where there is a difference between these three states.
repo status command shows the file status in current branch with two-letter code. Which is defined as?
In the first column, an uppercase letter indicates how the staging area differs from the last committed state.
 Character
 Meaning
 A
The file is added (brand new). Can only appear in the first column.
 M or m
The file already exists but has been modified in some way.
 D or d
The file has been deleted.
 R
The file has been renamed. Can only appear in the first column. The new name is also shown on the line.
 C
The file has been copied from another file. Can only appear in the first column. The source is also shown.
 T
Only the file's mode (executable or not) has been changed. Can only appear in the first column.
 U
The file has merge conflicts and is still unmerged. Can only appear in the first column.
 -
The file state is unmodified. A hyphen in both columns means this is a new file, unknown to Git. After you run git add on this file, repo status will show A-, indicating the file has been added.

In the second column, a lowercase letter indicates how the working directory differs from the index.

lettermeaningdescription
-new/unknownnot in index, in work tree
mmodifiedin index, in work tree, modified
ddeletedin index, not in work tree
For example, if you edit the file hello.c within the hello world project without staging the changes, then repo status might show
project helloworld/
-m     hello.c
Mean there is no change between staging area and repository, but file has been modified into working tree.
If you go on to stage the changes to hello.c by running git add, then repo status might show
project helloworld/
M-     hello.c
Mean file hello.c has been modified in staging area with respect to repository and in next commit this change will go into repository.
-- secondprogam.c specifies that new untracked file exist in source code.

forall

repo forall [ project-list ] -c command [ arg...]
Runs a shell command in each project.
Some time we want to run some git command in every git project. For that we can use repo forall.
For example if we want to get commit history of android project b/w v1.0 to v2.0 we can run this command
repo forall –c git log v1.0..v2.0

This command will run git log into all project repositories and will give us commit history between v1.o and v2.o
You can specify project-list as a list of names or a list of paths to local source directories for the projects

help

repo help [ command ]
Displays detailed help about a command.

prune

repo prune [ project-list ]
basically this command is used to remove stale branches. Mean branches which are already merged and deleted from remote but not have been removed from the local.
we can specify project-list as a list of names or a list of paths to local source directories for the projects:
repo prune [proj1 proj2 ... projN]