In both SAS Viya and SAS 9.6 M6 (Enterprise guide) I have the following problem:
I can successfully clone an online repository with multiple branches onto my SAS server location using either GIT_CLONE or GITFN_CLONE.
However, I cannot checkout onto an existing branch using onto that branch name.
For example:
GITFN_CO_BRANCH( "path_to_repo", "v1Harry")
This tells me that:
ERROR: Return code from GIT is (4). revspec 'v1Harry' not found
However when we change to:
GITFN_CO_BRANCH( "path_to_repo", "origin/v1Harry")
This works:
NOTE: Branch "origin/v1Harry" successfully checked out.
But the big problem now comes when we do a gitfn_status:
NOTE: Entry: README.md. Staged: True. Status: New.
NOTE: Entry: master_script.sas. Staged: True. Status: New.
Despite all files being on the branch online in the origin - git now thinks they are new.
This creates a huge problem if the repo has hundreds of files - it is nearly impossible to add them all back in as SAS has not allowed for git -A functionality in the GITFN_IDX_ADD function.
Finally let's say we go through the process of adding all these (unchanged files...) again and we commit and push from "origin/v1Harry"...
If we do this in SAS 9.4 we get this error:
ERROR: Return code from GIT is (9). object not found - no match for id (484541442f686f6d652f616c657867772f736173)
If we do this in Viya, then rather than branch v1Harry being updated on the origin, instead a new branch is created on the origin called "origin/v1Harry"
Am I doing something wrong?
Any help of advice would be most welcome.
BW,
Alex
Hi Alex,
I am currently facing exactly the same issue.
As you posted quite a long time ago and there seems to have been no answer, I am wondering whether you solve it ?
KR,
Etienne
well, I found a workaround but do not find it a suitable solution at long term.
Once I've cloned the repository, I am copying the ref from remotes/origin to heads within the local git metadata:
filename frefin "&path.\.git\refs\remotes\origin\&targetBranch";
filename frefout "&path.\.git\refs\heads\&targetBranch";
data _null_ ;
rc = fcopy('frefin', 'frefout');
msg = sysmsg();
put rc= msg=;
run;and then successfully checking out the &targetBranch.:
data _null_;
rc = git_branch_chkout("&path.", "&targetBranch.");
put rc = ;
run;
Create a local branch with the same name as the remote branch. Checking Out Branches
data _null_;
version = gitfn_version();
put version=;
run;
%let l_git_repo = 'C:\Git\xxxxxxx';
%let l_git_uri = 'https://?????/xxxxxxx.git';
%let l_git_user = '???????';
%let l_git_pw = '{SAS005}???????';
/* Delete REPO */
data _null_;
rc = GITfn_DEL_REPO(&git_repo.);
put rc=;
run;
/* Clone Repo */
data _null_;
rc = GIT_CLONE (&l_git_uri., &l_git_repo., &l_git_user., &l_git_pw.);
put rc=;
run;
/* Get Branch commit id from remote*/
%let l_git_branch = 'dev';
%let l_git_branch_commit_id = NA;
data _null_;
infile %sysfunc(quote(%sysfunc(dequote(&l_git_repo.))/.git/refs/remotes/origin/%sysfunc(dequote(&l_git_branch.))));
input;
call symputx( 'l_git_branch_commit_id',quote(cats(_infile_)),'l');
stop;
run;
%put &=l_git_branch_commit_id.;
/* create new local branch */
data _null_;
rc = git_branch_new(&l_git_repo., &l_git_branch_commit_id., &l_git_branch., 0);
put rc=;
run;
/* chkout local branch */
data _null_;
rc= git_branch_chkout(&l_git_repo.,&l_git_branch. );
put rc=;
run;
/* pull changes */
data _null_;
rc= git_pull(&l_git_repo., &l_git_user., &l_git_pw.);
put rc=;
run;
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.
Ready to level-up your skills? Choose your own adventure.